返回

Dart 空安全初探

见解分享

空安全如何工作?

在 Dart 中,变量可以被标记为可空或不可空。一个可空的变量可以存储一个值或 null,而一个不可空的变量只能存储一个值。如果尝试给一个不可空的变量分配一个 null,将会导致编译时错误。

例如,以下代码会产生错误,因为变量 name 被标记为不可空,但我们尝试给它分配一个 null:

void main() {
  String name;
  name = null; // Error: Cannot assign null to a non-nullable variable
}

Dart 编译器会推断变量的类型,并根据推断出的类型来确定变量是否可以存储 null。例如,以下代码中的变量 name 会被推断为不可空,因为它是从一个非空字符串字面量中分配的:

void main() {
  var name = "Bob";
  name = null; // Error: Cannot assign null to a non-nullable variable
}

我们还可以使用 ? 运算符来显式地将变量标记为可空。例如,以下代码中的变量 name 被标记为可空,因为它是从一个可以返回 null 的函数中分配的:

void main() {
  String? name = getName();
  name = null; // No error: name is nullable
}

String? getName() {
  return null;
}

空安全的好处

Dart 空安全有很多好处,包括:

  • 更健壮的代码: Dart 空安全可以帮助您编写更健壮的代码,因为编译器会捕获许多因 null 引发的问题。这可以减少运行时错误的数量,并使您的代码更加可靠。
  • 更好的代码可读性: Dart 空安全可以提高代码的可读性,因为您可以清楚地看到哪些变量可以存储 null,哪些变量不可以。这可以使您的代码更容易理解和维护。
  • 更快的开发速度: Dart 空安全可以加快开发速度,因为编译器会捕获许多因 null 引发的错误,这样您就不必在运行时调试这些错误。

何时使用空安全

Dart 空安全对于任何使用 Dart 的项目都是一个好主意。然而,在某些情况下,使用空安全可能会带来一些开销。例如,如果您有一个大型的、已经存在的代码库,那么添加空安全可能会很困难。在这种情况下,您可能需要权衡使用空安全的好处和成本。

结论

Dart 空安全是一项强大的工具,可以帮助您编写更健壮、更易读、更易维护的代码。如果您还没有使用 Dart 空安全,我强烈建议您开始使用它。