简介
Dart语言在2.0引入空指针安全也就是Null safety,Null safety简单来说就是对空指针添加了安全界定,用我理解的话来说,之所以会有空指针安全被作为语法规则引入,以下面几点为主:
- 代码开发更愉快,最近流行的Kotlin其中的一个优势就是其引入了Null Safely,这在代码开发上能避免很多错误,而作为Dart语言开发的主阵地flutter是以热重载(hot fix)为开发优势的,能够使开发者不重复进行代码编译,通过运行时就能进行开发工作,大大节省了代码开发时间,在Dart引入Null Safely之前,如果产生了空指针相关错误就会抛出 类似NoSuchMethodError这些会影响运行时的异常,对于这种异常我们就需要再次重新编译和运行,这对flutter来说就是削弱原有的优势,对开发者来说,原本愉快的开发也将变得不愉快。
- 避免空指针错误,空指针错误在日常代码中是非常常见的,其中空指针就是空引用,空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常,而Null Safely能够帮助我们减少这方面的错误产生,在一定程度上就是减少项目问题和异常的产生,是整体开发过程更加安全且有效率。
- 语法更简洁,相对于我们原来的一些判空等方式来对空指针错误进行处理,dart引入了一系列语法糖来使我们的语法显得代码更为简洁,让整体逻辑能够更加的清楚。
Tips:其中如果没有Null Safely,下方代码在执行时就会产生NoSuchMethodError异常。
// Without null safety:
bool isEmpty(String string) => string.length == 0;
main() {
isEmpty(null);
}
Dart官方的引入原则为如下三条:
- Code should be safe by default(默认情况下代码应该是安全的)
- Null safe code should be easy to write (空指针安全代码应该很容易编写)
- The resulting null safe code should be fully sound(空指针安全代码应该是健全的的)
语法糖
在Dart官方文档Null Safely移植文档里主要是针对下面几个语法进行一部分处理。
对于其中几个也是空指针安全处理常见的语法标记,我们在下面一一对应了解。
符号 | 作用简述 | 使用场景 |
---|---|---|
! | 断言,表明该变量不会是空 | context!.widget.key;//告诉编译器Context不会是空,可以编译 |
? | 可空,表明参数可以填空 | var ints = const <int?>[0, null];//参数除了int也可以填入null |
late | 稍后初始化,表明目前虽然是空,但后续会进行初始化 | late int time;//目前不知到初始值,需运行后获取,可稍后初识化 |
required | 要求入参,表明该参数是必须填入的 | Test({double ? nulltest,required int nottest});//nulltest可空,但nottest必须填入 |
附
Dart Null Safety目前引入环境SDK至少高于2.12.0,环境修改位置为pubspec.yaml 文件:
environment:
sdk: '>=2.12.0 <3.0.0'