likes
comments
collection
share

Dart的空安全详解

作者站长头像
站长
· 阅读数 21

  Dart 2.12 版本引入了空安全(Null Safety)特性,这个特性可以帮助开发者检测并避免使用空值,从而提高代码的健壮性和可靠性。本文将为大家介绍Dart空安全的基本概念和使用方法。

什么是空安全

  在Dart中,空(null)是一个常见的问题,使用空值可能会导致程序崩溃或产生不可预期的行为。空安全机制旨在帮助开发者检测并避免使用空值。空安全意味着每个变量都必须具有非空值或明确声明其可为空性。

基本用法

声明可空变量

在Dart中,使用 ? 来标记一个变量可以为空。例如:

String? nullableString; 

  这个变量声明了一个字符串类型的变量,该变量可以存储非空的字符串或空值。如果尝试访问这个变量的时候,它的值为空,编译器会产生一个警告。

声明不可为空变量

在Dart中,省略 ? 来标记一个变量为不可为空。例如:

String nonNullableString; 

  这个变量声明了一个字符串类型的变量,该变量不能存储空值。如果尝试给这个变量赋空值,编译器会产生一个错误。

Late关键字

  有时候我们可能需要在后面的代码中才能初始化一个变量。在Dart语言中,可以使用 late 关键字来延迟变量的初始化。例如:

late String lateInitializedString;

void main() {
lateInitializedString = "Hello, world!"; 
print(lateInitializedString);
} 

  这个程序输出的结果是 Hello, world!。使用 late 关键字,可以延迟变量的初始化,避免了一些不必要的初始值计算。

非空断言

  如果你确定一个可为空的变量在某个时刻不为空,可以使用非空断言(!)来告诉编译器。例如:

String? nullableString;
void main() {
nullableString = "Hello, world!";
print(nullableString!.length);
}

  这个程序输出的结果是 13。使用非空断言,可以告诉编译器一个可为空的变量在某个时刻不为空。

避免空值的几种方式

  除了使用空安全特性声明可空和不可为空的变量外,还有其他几种方法可以避免空值。

默认值

在Dart中,可以使用默认值来避免空值。 例如:

String name = "";

在这个例子中,如果没有指定 name 的值,它的默认值为一个空字符串。

条件语句

使用条件语句可以检查变量是否为空,从而避免空值。例如:

String? nullableString; if (nullableString != null) { print(nullableString.length); } else { print("nullableString is null"); }

  在这个例子中,使用 if 条件语句检查 nullableString 是否为空。如果它不为空,打印出字符串的长度;如果它为空,打印出一条信息说明变量为空。

级联操作符

级联操作符(..)可以帮助避免空值。例如:

String? nullableString; (nullableString ?? "") ..trim() ..toLowerCase();

  在这个例子中,使用了 ?? 操作符来检查 nullableString 是否为空,如果它为空,则使用一个空字符串代替。然后使用级联操作符进行字符串处理,包括删除空格和将字符串转换为小写。如果 nullableString 为空,则不会执行级联操作符。

结论

  Dart的空安全特性可以帮助开发者检测并避免使用空值,从而提高代码的健壮性和可靠性。本文介绍了Dart空安全的基本概念和使用方法,包括如何声明可空和不可为空的变量、使用Late关键字延迟变量初始化、使用非空断言告诉编译器一个可为空的变量在某个时刻不为空,以及避免空值的几种方法,包括使用默认值、条件语句和级联操作符等。

转载自:https://juejin.cn/post/7224382896626401340
评论
请登录