首页 > 其他分享 >前端学习-Dart官方文档学习-001-基础表达式

前端学习-Dart官方文档学习-001-基础表达式

时间:2024-05-24 10:19:55浏览次数:29  
标签:const 变量 .. Dart 学习 001 import lib2 final

学习链接

变量

创建并初始化变量

// 不指定变量类型,自动推断为String;可通过指定类型改变
var name = 'Bob';
// 一个对象不受限于单一类型时,使用 Object 或 dynamic(谨慎使用)
Object name = 'Bob';
dynamic name = 'Bob';
// 直接指定类型
String name = 'Bob';

空安全

空安全能够防止意外访问 null 的变量而导致的错误,如调用值为null的属性或方法会报错(toString() 方法和 hashCode 属性例外)
如果出现错误,会在编译时报错,不会在运行时报错
空安全的3个关键点

  • 使用?控制变量是否可空
String? name  // Nullable type. Can be `null` or string.
String name   // Non-nullable type. Cannot be `null` but can be string.
  • 可空变量默认初始化为null,非可空变量需要自己初始化值(不必在声明变量时初始化变量,但在使用之前需要为其赋值)
  • 不能在可空类型的表达式上访问属性或调用方法(toString() 方法和 hashCode 属性例外)

延迟初始化变量

顶级变量(指在整个 Dart 程序或库的最外层作用域中定义的变量)和类变量((也称为静态变量)是与类本身相关联而不是与类的实例相关联的变量)是延迟初始化的,它们会在第一次被使用时再初始化。
当一个 late 修饰的变量在声明时就指定了初始化方法,那么内容会在第一次使用变量时运行初始化

// This is the program's only call to readThermometer(). 如果 temperature 变量从未被使用,则 readThermometer() 这个开销较大的函数也永远不会被调用
late String temperature = readThermometer(); // Lazily initialized.

终值 (final) 和常量 (const)

一个 final 变量只能设置一次,const 变量是编译时常量。(const 常量隐式包含了 final。)

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
// 使用 const 修饰 编译时常量 的变量
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
// 创建常量 值(values),以及声明 创建(create) 常量值的构造函数。任何变量都可以拥有常量值。
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

操作符 Operators

级联符号...和?..

// 以下两段代码相等
// 代码1
var paint = Paint()
  ..color = Colors.black
  ..strokeCap = StrokeCap.round
  ..strokeWidth = 5.0;
// 代码2
var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;

如果级联操作对象可为空,使用?..

// 以下两段代码相等
// 代码1
querySelector('#confirm') // Get an object.
  ?..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'))
  ..scrollIntoView();
// 代码2
var button = querySelector('#confirm');
button?.text = 'Confirm';
button?.classes.add('important');
button?.onClick.listen((e) => window.alert('Confirmed!'));
button?.scrollIntoView();

嵌套级联

final addressBook = (AddressBookBuilder()
      ..name = 'jenny'
      ..email = '[email protected]'
      ..phone = (PhoneNumberBuilder()
            ..number = '415-555-0100'
            ..label = 'home')
          .build())
    .build();

展开运算符.../...?

实际并不是运算符,视为在运算符中优先级最低

[...a + b]

注释Comments

// Single-line comments
/* 
  Multi-line comments
*/
/// Documentation comments
/** Documentation comments

注解Metadata

  • 以@开头,后面是对编译时常量的引用(例如deprecated)或对常量构造函数的调用。
  • 所有Dart代码都可以使用四种注释:@Deprecated, @deprecated, @override, @pragma.
class Television {
  /// Use [turnOn] to turn the power on instead.
  @Deprecated('Use turnOn instead')
  void activate() {
    turnOn();
  }

  /// Turns the TV's power on.
  void turnOn() {...}
  // ···
}
  • 可以自定义注解
class Todo {
  final String who;
  final String what;

  const Todo(this.who, this.what);
}
@Todo('Dash', 'Implement this function')
void doSomething() {
  print('Do something');
}
  • Metadata can appear before a library, class, typedef, type parameter, constructor, factory, function, field, parameter, or variable declaration and before an import or export directive.

库和导入 Libraries & imports

  • 导入库
import 'dart:html'; // For built-in libraries
import 'package:test/test.dart'; // libraries provided by a package manager
  • 指定前缀
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// Uses Element from lib1.
Element element1 = Element();

// Uses Element from lib2.
lib2.Element element2 = lib2.Element();
  • 导入库的部分内容
// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
  • 延迟加载deferred as
// 标记延迟加载
import 'package:greetings/hello.dart' deferred as hello;
// 使用前先调用loadLibrary(),loadLibrary()可多次调用,库仅加载一次
Future<void> greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

关键字 Keywords

关键字

标签:const,变量,..,Dart,学习,001,import,lib2,final
From: https://www.cnblogs.com/ayubene/p/18205866

相关文章

  • 性能测试学习之路(八)—Jmeter之响应断言详解
    Jmeter使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。使用断言的方法:在选择的Sampler下添加对应的断言(因为不同类型的断言检查的内容不同);配置好响应的检查内容在Jmeter的断言中,我们常使用的就是响应断言,他根据我们响应信息......
  • Vitis HLS 学习笔记--控制驱动TLP - Dataflow视图
    目录1.简介2. 功能特性2.1 DataflowViewer的功能2.2 Dataflow 和 Pipeline的区别3.具体演示4.总结1.简介Dataflow视图,即数据流查看器。DATAFLOW优化属于一种动态优化过程,其完整性依赖于与RTL协同仿真的完成。因此,“Dataflow”(数据流)查看器的设计目的是......
  • Vitis HLS 学习笔记--控制驱动TLP-处理deadlock
    目录1.简介2.代码解析2.1HLSkernel代码2.2查看接口报告2.3TestBench2.4Dataflow报告3.Takeaways4.总结1.简介本文是对《HardwareAccelerationTutorials:FIFOSizingforPerformanceandAvoidingDeadlocks》实验内容的详细解释。首先需要了解,鉴于......
  • C语言:动态内存管理的学习1
    动态内存管理本章重点为什么存在动态内存分配?动态内存函数的介绍mallocfreecallocrealloc常见的动态内存错误·几个经典的笔试题·柔性数组一.为什么存在动态内存分配?我们已经学到的开辟空间的方法:inta;intarr[100];单个开辟空间或者连续开辟空间;在数组的......
  • Vue 3 学习笔记
    1.Vue3简介2020年9月18日,Vue.js发布版3.0版本,代号:OnePiece(n经历了:4800+次提交、40+个RFC、600+次PR、300+贡献者官方发版地址:Releasev3.0.0OnePiece·vuejs/core截止2024年5月,最新的公开版本为:3.4.271.1.【性能的提升】打包大小减少41%。初次渲染快55%,......
  • TensorBoard相关学习
    TensorBoard是Google为TensorFlow框架开发的一个强大的可视化工具,它可以帮助用户更直观地理解、分析和调试机器学习模型的训练过程。通过TensorBoard,你可以可视化模型的结构、监控训练过程中的指标变化(如损失函数、准确率)、查看权重直方图、嵌入向量,甚至可以展示图像数据等......
  • Bash反弹shell & 搭建网页服务器 & 文件描述符学习 & ssh连接vm虚拟机 & sftp进行文件
    环境:kali:┌──(kali㉿kali)-[~/Desktop]└─$cat/proc/versionLinuxversion6.0.0-kali5-amd64([email protected])(gcc-12(Debian12.2.0-9)12.2.0,GNUld(GNUBinutilsforDebian)1.建立一个简单的链接进行nc,可以进行两个端口通信!#首先使用nc监听......
  • C++基础知识学习笔记(2)
    资料来源https://www.bilibili.com/video/BV1et411b73Z/?spm_id_from=333.337.search-card.all.click&vd_source=cc561849591f6a210152150b2493f6f3简单知识点指针作用:通过指针间接访问内存可以通过指针来保存一个地址。指针所占内存空间32位操作系统,占4个字节。64位操......
  • K-D tree 学习笔记
    \(\text{K-Dtree}\)学习笔记\(\text{K-Dtree}\)是一种针对\(k\)维问题求解的算法,并且拥有出色的时空复杂度。思想\(\text{K-Dtree}\)本质上是一棵\(k\)维的二叉平衡树,这保证了其树高稳定在\(\logn\)附近,为求解提供了较为优异的建树模式。\(\text{K-Dtree}\)首......
  • 给大家分享一套非常棒的python机器学习课程
    给大家分享一套非常棒的python机器学习课程——《AI小天才:让小学生轻松掌握机器学习》,2024年5月完结新课,提供配套的代码+笔记+软件包下载!学完本课程,可以轻松掌握机器学习的全面应用,复杂特征工程,数据回归,分类,算法的项目实战应用,以小学生的视角和知识储备即可学会。课程名字:AI小天才......