Dart 团队宣布,Dart 编程语言通过其新的 null safety 功能的技术预览达到了一个新的主要里程碑。该团队表示,此功能已经开发了一年多,是自 Dart 2 以来 Dart 语言最大的新增功能。Null safety 现已可在 DartPad 版本中进行试用,并将于 2020 年底投入生产。
团队成员 Filip Hracek 和 Michael Thomsen 在帖子中写道:“Null safety 可以帮助你避免一类通常难以发现的 bug,并且作为额外的奖励,可以实现一系列的性能改进。”
Dart 是一种 type-safe 语言,这意味着编译器可以保证变量的类型,但是类型安全性本身不能保证变量不为 null。Null error 在 Dart 中是常见的,并导致 Dart 代码中出现了许多问题。
Null safety 为开发人员保证他们的代码不包含 null 元素。且 Null safety 在编写代码时会提供静态错误,因此开发人员不必等到代码在运行时编译后即可发现错误。
Dart 团队设计此功能时秉承的三个核心原则为:
它必须在默认情况下是 non-nullable,以便开发人员可以明确声明变量何时可以为 null。
它必须是逐步采用的,这意味着 null-safe 代码和 non-null-safe 代码可以在同一项目中一起存在。
第三,它必须 fully sound。
根据该团队的说法,Dart 的 null safety 是向后兼容的,不是突破性的变化。这意味着现有代码可以调用使用 null safety 的代码,并且 null safety 将在可用时成为可选功能。
从现在开始,其会添加更多新功能来逐步完善自身,例如添加迁移工具、pub.dev 上的标签(用于显示软件包是否支持 null safety)以及对 “pub outdated”命令的扩展,增加了对查找支持 null safety 的依赖版本的支持。
有关 null safety 的更多信息及其代码示例,可参见