Dart 2.12+ 复习笔记

142 阅读2分钟

2021年 创业末段遇到的最大困难就是:基于 Dart 2.12+ 对现有项目重构,如今重新学习语法变更,大家可以参照 AlexV525 这篇官方的译文文章对照学习,深入理解 Dart 空安全

1. Never 类型用于抛出异常

2. == null 和 != null 的表达式会进行变量提升

3. 除此以外需要使用后置! 代表非空断言

4. 避空运算符级联时只写一次

// 使用了空安全: 
showGizmo(Thing? thing) {  
	print(thing?.doohickey.gizmo); 
}

5. late 关键字

  • 将类型约束延后至运行时

    late String _temperature;
    
  • 在一个包含初始化内容的字段上使用 late, 会让初始化延迟执行

    // 使用了空安全:
    class Weather {
      late int _temperature = _readThermometer();
    }	
    

    实例字段的初始化可以访问到 this、调用方法以及访问实例的字段

6.required 关键字

7. Map操作符 [] 固定返回可空类型,需要 []!

8. 总结:

您需要掌握的核心要点有:

  • 类型默认是非空的,可以添加 ? 变为可空的。
  • 可选参数必须是可空的或者包含默认值的。 您可以使用 required 来构建一个非可选命名参数。 非空的全局变量和静态字段必须在声明时被初始化。 实例的非空字段必须在构造体开始执行前被初始化。
  • 如果接收者为 null,那么在其避空运算符之后的链式方法调用都会被截断。 我们引入了新的空判断级联操作符 (?..) 及索引操作符 (?[])。 后缀空断言“重点”操作符 (!) 可以将可空的操作对象转换为对应的非空类型。
  • 新的流程分析,让您更安全地将可空的局部变量和参数,转变为可用的非空类型。 它同时还对类型提升、遗漏的返回、不可达的代码以及变量的初始化,有着更为智能的规则。
  • late 修饰符以在运行时每次都进行检查的高昂代价, 让您在一些原本无法使用的地方,能够使用非空类型和 final。 它同时提供了对字段延迟初始化的支持。
  • List 类现在不再允许包含未初始化的元素。

作者:AlexV525 链接:juejin.cn/post/688410… 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。