Dart 是一种类型安全的语言,这意味着当开发者获取某种类型的变量时,编译器可以保证它是该类型,但是类型安全本身不能保证变量不是 null
。
Null errors 非常常见的问题,在 GitHub上 可以搜索到成千上万由于 null
导致 Dart 代码出现异常的问题,甚至有成千上万的 commits 试图解决这些问题。
例如你尝试查看是否可以在以下示例代码中发现 nullability 问题:
void printLengths(List files) {
for (var file in files) {
print(file.lengthSync());
}
}
如果通过 null
调用此函数肯定会失败,但是还要考虑第二种情况:
void main() {
// Error case 1: passing a null to files.
printLengths(null);
// Error case 2: passing list of files, containing a null item.
printLengths([File(‘filename1’), File(‘filename2’), null]);
}
而空安全功能可以使该问题消失了:
使用 null
安全,开发者就可以放心地对代码进行推导,不再有讨厌的运行时 null
引用错误。相反开发者可以在编写代码时就发现静态错误。