dart系列之:安全看我,dart中的安全特性null safety
文章目錄
- 簡介
- Non-nullable類型
- Nullable List Of Strings 和 List Of Nullable Strings
- !操作符
- late關(guān)鍵字
- 總結(jié)
簡介
在Dart 2.12中引入了null safety的新特性,也就是說dart程序中默認(rèn)類型都是非空的,除非你顯示告訴編譯器,這個(gè)類型可以為空。
看起來是一個(gè)小小的改動(dòng),但是這個(gè)小小的改動(dòng)導(dǎo)致了很多Dart包的大版本升級(jí),從而導(dǎo)致使用Dart2.12之前的版本跟使用dart2.12之后的版本完全就是兩個(gè)不同的世界。
真的這么奇妙嗎?一起來看看Dart 2.12 null safety的特性吧。
Non-nullable類型
在感受Non-nullable類型之前,我們先看一段代碼:
void main(){String name;print('name is $name.'); }代碼很簡單,我們定義了一個(gè)String類型的name字符串,然后在print語句中打印它。
如果你是在dart 2.12版本之前,那么是沒有問題的。
但是到了2.12,則會(huì)報(bào)錯(cuò):
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是非空的,你必須要給他賦個(gè)值。
通過強(qiáng)制不為空,保證了代碼的安全性,非常好用。
那么如果name就可以為空怎么處理呢?
別急,我們可以給可以為空的類型后面加上?即可:
void main(){String? name;print('name is $name.'); }Nullable List Of Strings 和 List Of Nullable Strings
假如我們要?jiǎng)?chuàng)建一個(gè)List,list里面包含的是String,則可以這樣創(chuàng)建:
List<String> aListOfStrings = ['one', 'two', 'three'];在dart 2.12中,非空檢查也被用到了泛型中,所以,默認(rèn)情況下List中的String也不能為空,如果非要為空,則需要這樣寫:
List<String?> aListOfNullableStrings = ['one', null, 'three'];對(duì)于list本身來說,它也是不能為空的,如果要為空,則需要這樣寫:
List<String>? aNullableListOfStrings;!操作符
如果你認(rèn)為某個(gè)對(duì)象在使用的時(shí)候確定不是null,那么可以在表達(dá)式后面添加!,如下所示:
String? word;word = aListOfNullableStrings.first;print(word!.length);late關(guān)鍵字
有時(shí)候,我們知道某個(gè)對(duì)象一定不是空,但是目前來說,并不能立刻對(duì)其進(jìn)行賦值,這時(shí)候就需要使用到late關(guān)鍵字。
下面是一個(gè)用到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!'); }上面的代碼中,我們有兩個(gè)類互相引用,但是兩個(gè)類都是不為空的,如果不使用late,則會(huì)編譯失敗。
使用late就可以在后面合適的時(shí)候?qū)︻愔械膶傩赃M(jìn)行初始化,從而保證代碼的運(yùn)行。
總結(jié)
以上就是dart 2.12中新增加的null safety的使用。
本文已收錄于 http://www.flydean.com/24-dart-null-safety/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!
歡迎關(guān)注我的公眾號(hào):「程序那些事」,懂技術(shù),更懂你!
總結(jié)
以上是生活随笔為你收集整理的dart系列之:安全看我,dart中的安全特性null safety的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JetBrains又出神器啦,Fleet
- 下一篇: dart系列之:dart优秀的秘诀-隔离