Dart 语言即将 全面引入 健全的空安全机制了,当您选择使用空安全时,代码中的类型将默认是非空的, 意味着 除非您声明它们可空,它们的值都不能为空。有了空安全,原本处于您的 运行时 的空值引用错误 将变为 编译时 的分析错误。
今天的推送文章我们将概述空安全是如何影响 Dart 语言的。如果希望深入了解空安全性的工作原理,请关注我们的公众号推送,我们将于近期推送第二篇关于空安全的文章《深入理解 Dart 空安全》。
有了空安全,Dart 分析器可以进行更好的检查。例如:它将在您读取一个可空的变量前提示您进行空检查。由于 Dart 的空安全是十分有效的, Dart 编译器和运行环境也同时可以通过优化减少内部的空安全检查, 这样应用就可以更快且更小。
由于目前空安全仍然处于技术预览阶段, 所以 请勿在生产环境使用空安全。请注意,Flutter 目前尚未支持空安全。请通过 Dart SDK 测试这项特性, 并且给予我们反馈。
与空安全相关的新操作符和关键字有 ?
、!
和 late
。如果您曾经使用过 Kotlin、TypeScript 或 C# 进行开发, 那么这些空安全的语法看起来会有些熟悉。这是设计使然:Dart 语言的目标是不让您感到惊讶。
您可以在您的项目设置里启用技术预览版 SDK(见本文下面章节),从而在您的项目里实践空安全。或者通过 支持空安全的 DartPad (nullsafety.dartpad.cn) 进行练习。
创建变量
当您创建变量时, 您可以使用 ?
和 late
告诉 Dart 这些变量是否可空。
以下是一些声明 非空变量 的例子(假设您已经使用了空安全):
// In null-safe Dart, none of these can ever be null.
var i = 42; // Inferred to be an int.
String name = getFileName();
final b = Foo();
如果这些变量 可以 为空值 ( null
), 在类型声明处 加上 ?
。
int? aNullableInt = null;
在您已经明确一个非空变量一定会在使用前初始化, 而 Dart 分析器仍然无法明确的情况下, 您可以在变量的类型前 加上 late
ÿ