dart 系列之: 安全看我,dart 中的安全特性 null safety
简介
在 Dart 2.12 中引入了 null safety 的新特性,也就是说 dart 程序中默认类型都是非空的,除非你显示告诉编译器,这个类型可以为空。
看起来是一个小小的改动,但是这个小小的改动导致了很多 Dart 包的大版本升级,从而导致使用 Dart2.12 之前的版本跟使用 dart2.12 之后的版本完全就是两个不同的世界。
真的这么奇妙吗?一起来看看 Dart 2.12 null safety 的特性吧。
Non-nullable 类型
在感受 Non-nullable 类型之前,我们先看一段代码:
代码很简单,我们定义了一个 String 类型的 name 字符串,然后在 print 语句中打印它。
如果你是在 dart 2.12 版本之前,那么是没有问题的。
但是到了 2.12,则会报错:
意思就是说,name 是非空的,你必须要给他赋个值。
通过强制不为空,保证了代码的安全性,非常好用。
那么如果 name 就可以为空怎么处理呢?
别急,我们可以给可以为空的类型后面加上?即可:
Nullable List Of Strings 和 List Of Nullable Strings
假如我们要创建一个 List,list 里面包含的是 String,则可以这样创建:
在 dart 2.12 中,非空检查也被用到了泛型中,所以,默认情况下 List 中的 String 也不能为空,如果非要为空,则需要这样写:
对于 list 本身来说,它也是不能为空的,如果要为空,则需要这样写:
!操作符
如果你认为某个对象在使用的时候确定不是 null,那么可以在表达式后面添加!,如下所示:
late 关键字
有时候,我们知道某个对象一定不是空,但是目前来说,并不能立刻对其进行赋值,这时候就需要使用到 late 关键字。
下面是一个用到 late 的例子:
上面的代码中,我们有两个类互相引用,但是两个类都是不为空的,如果不使用 late,则会编译失败。
使用 late 就可以在后面合适的时候对类中的属性进行初始化,从而保证代码的运行。
总结
以上就是 dart 2.12 中新增加的 null safety 的使用。
本文已收录于 http://www.flydean.com/24-dart-null-safety/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
版权声明: 本文为 InfoQ 作者【程序那些事】的原创文章。
原文链接:【http://xie.infoq.cn/article/9754b2be85b9a3b5f4f7d9767】。文章转载请联系作者。
评论