📜  Dart – 空安全(1)

📅  最后修改于: 2023-12-03 15:30:22.159000             🧑  作者: Mango

Dart - 空安全

概述

Dart是一种面向对象、类C语言和JavaScript的编程语言,由Google开发。Dart具有众多优点,其中最大的一个优点是空安全。空安全使Dart代码更加健壮、安全,并且减少了空指针异常的发生。

空安全原理

空安全是Dart解决空指针异常的一种机制,它可以帮助开发者在编译时检测可能引起空指针异常的代码。Dart通过在类型系统中引入null的概念,区分了nullable类型和non-nullable类型。在Dart2之前,所有类型都可以为null,但在Dart2中,非空安全类型是默认non-nullable类型,如果将nullable类型赋值给non-nullable类型的变量,就会产生编译时错误。

空安全语法
?和!操作符

在Dart中,通过在类型名称后面添加问号(?)来指定该类型为nullable类型,例如:

int? nullNumber;

如果不添加?,则该类型默认为non-nullable类型,例如:

int nonNullNumber;

在Dart中,还可以通过添加感叹号(!)来断言某个对象不为空,例如:

int? nullNumber;
int nonNullNumber = nullNumber!;

这条语句表示,虽然nullNumber是nullable类型,但是在这里我们已经断言它不为空,所以可以将其赋值给nonNullNumber。

late关键字

在Dart中,还可以使用late关键字来指定该变量是延迟初始化的。这样,即使该变量为nullable类型,也不会在声明时被初始化,而是在第一次使用时才被初始化,例如:

late int? nullNumber;
空安全实例

让我们来看一个使用null安全特性的示例,例如:

String? name = getName();
int age = getAge();
String message;
if (name != null) {
  message = "$name is $age years old.";
} else {
  message = "Person's name is null.";
}

print(message);

在这个例子中,我们声明了一个nullable类型的String变量name,并且调用了一个返回String值的函数getName()。然后,我们声明了一个非空安全的int变量age,并调用了一个返回int值的函数getAge()。最后,我们创建了一个String变量message,在判断name是否为空之后,将name与age联合成一个字符串,最后打印出了message的值。

结论

空安全使Dart代码的安全性更高,减少了空指针异常的发生。Dart提供了许多空安全的特性,例如nullable类型、non-nullable类型和late关键字等。开发者可以选择使用这些特性来编写更安全的Dart代码。