返回
空安全 — Dart语言系列—
前端
2024-01-01 16:59:23
什么是空安全?
Flutter中的空安全是一组功能和设计理念,可确保Dart应用程序对null值保持一致且稳健。使用空安全可以让您编写更安全、更健壮的代码,同时避免许多常见的错误,从而有助于提高应用程序的质量和可靠性。
空安全的基本原理
空安全基于以下三个基本原则:
- Null不能被隐式传递 :如果一个变量被声明为非空类型,那么它只能存储非空值。这意味着您无法将null值赋给非空变量,反之亦然。
- 空安全变量在使用前必须被显式初始化 :空安全变量在使用前必须被显式初始化,这意味着您必须在使用之前给它赋予一个非空值。这可以防止在使用未初始化的变量时出现错误。
- 空安全类型在编译时被检查 :空安全类型在编译时被检查,这意味着编译器会在编译时检查代码中是否存在类型不匹配的情况。这可以帮助您在运行时之前发现错误,从而避免出现运行时错误。
如何启用空安全?
要启用空安全,您需要在Dart代码文件中添加以下代码:
// Dart >= 2.12
// @dart = 2.12
添加此代码后,您需要将代码中的所有类型注释更新为非空类型。例如,以下代码将一个变量声明为非空字符串:
String name = 'Bob';
空安全的数据类型
Dart中的数据类型可以分为两类:空安全类型和非空类型。
空安全类型是那些不能存储null值的类型。空安全类型包括:
- 数字类型 (如int、double等)
- 布尔类型 (bool)
- 字符串类型 (String)
- 列表类型 (List)
- 集合类型 (Set)
- 映射类型 (Map)
非空类型是那些可以存储null值的类型。非空类型包括:
- Nullable类型 (如int?、double?等)
- Null类型 (Null)
空安全的操作符与
Dart中提供了多种操作符和关键字来支持空安全。这些操作符和关键字包括:
- !运算符 :!运算符用于将一个非空类型转换为一个可空类型。例如,以下代码将一个非空字符串转换为一个可空字符串:
String? name = !'Bob';
- ?运算符 :?运算符用于将一个可空类型转换为一个非空类型。例如,以下代码将一个可空字符串转换为一个非空字符串:
String name = 'Bob'?;
- late修饰符 :late修饰符用于延迟变量的初始化。这允许您在使用变量之前再初始化它。例如,以下代码使用late修饰符延迟初始化一个变量:
late String name;
空安全示例
// A function that takes a non-nullable string and returns a non-nullable string.
String greet(String name) {
return 'Hello, $name!';
}
// A function that takes a nullable string and returns a nullable string.
String? greetNullable(String? name) {
if (name != null) {
return 'Hello, $name!';
} else {
return null;
}
}
// A function that takes a nullable string and returns a non-nullable string.
String greetWithDefault(String? name, String defaultName) {
return name ?? defaultName;
}
总结
空安全是一项非常重要的功能,它可以帮助您编写更安全、更健壮的代码。如果您正在使用Flutter开发应用程序,那么强烈建议您启用空安全。