写点什么

dart 系列之: 安全看我,dart 中的安全特性 null safety

作者:程序那些事
  • 2021 年 12 月 14 日
  • 本文字数:1185 字

    阅读完需:约 4 分钟

dart系列之:安全看我,dart中的安全特性null safety

简介

在 Dart 2.12 中引入了 null safety 的新特性,也就是说 dart 程序中默认类型都是非空的,除非你显示告诉编译器,这个类型可以为空。


看起来是一个小小的改动,但是这个小小的改动导致了很多 Dart 包的大版本升级,从而导致使用 Dart2.12 之前的版本跟使用 dart2.12 之后的版本完全就是两个不同的世界。


真的这么奇妙吗?一起来看看 Dart 2.12 null safety 的特性吧。

Non-nullable 类型

在感受 Non-nullable 类型之前,我们先看一段代码:


void main(){  String name;  print('name is $name.');}
复制代码


代码很简单,我们定义了一个 String 类型的 name 字符串,然后在 print 语句中打印它。


如果你是在 dart 2.12 版本之前,那么是没有问题的。


但是到了 2.12,则会报错:


The non-nullable local variable 'name' must be assigned before it can be used.
Try giving it an initializer expression, or ensure that it's assigned on every execution path.
复制代码


意思就是说,name 是非空的,你必须要给他赋个值。


通过强制不为空,保证了代码的安全性,非常好用。


那么如果 name 就可以为空怎么处理呢?


别急,我们可以给可以为空的类型后面加上?即可:


void main(){  String? name;  print('name is $name.');}
复制代码

Nullable List Of Strings 和 List Of Nullable Strings

假如我们要创建一个 List,list 里面包含的是 String,则可以这样创建:


List<String> aListOfStrings = ['one', 'two', 'three'];
复制代码


在 dart 2.12 中,非空检查也被用到了泛型中,所以,默认情况下 List 中的 String 也不能为空,如果非要为空,则需要这样写:


List<String?> aListOfNullableStrings = ['one', null, 'three'];
复制代码


对于 list 本身来说,它也是不能为空的,如果要为空,则需要这样写:


List<String>? aNullableListOfStrings;
复制代码

!操作符

如果你认为某个对象在使用的时候确定不是 null,那么可以在表达式后面添加!,如下所示:


  String? word;  word = aListOfNullableStrings.first;  print(word!.length);
复制代码

late 关键字

有时候,我们知道某个对象一定不是空,但是目前来说,并不能立刻对其进行赋值,这时候就需要使用到 late 关键字。


下面是一个用到 late 的例子:


class Team {  late final Coach coach;}
class Coach { late final Team team;}
void main() { final myTeam = Team(); final myCoach = Coach(); myTeam.coach = myCoach; myCoach.team = myTeam;
print('All done!');}
复制代码


上面的代码中,我们有两个类互相引用,但是两个类都是不为空的,如果不使用 late,则会编译失败。


使用 late 就可以在后面合适的时候对类中的属性进行初始化,从而保证代码的运行。

总结

以上就是 dart 2.12 中新增加的 null safety 的使用。


本文已收录于 http://www.flydean.com/24-dart-null-safety/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 2 小时前阅读数: 6
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
dart系列之:安全看我,dart中的安全特性null safety