iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0

接續Day01的null值,dart還有一個特色叫做null-aware operators,null-aware operators對於處理nullable value是很方便的工具,null-aware operators可以檢查那個變數是不是null值。

null-aware operators: ??=

??=只有在變數為null值的時候才能附予變數值

int? a; // = null
a ??= 3;
print(a); // <-- Prints 3.

a ??= 5;
print(a); // <-- Still prints 3.

我們可以把??當作if-null operator,當變數只有為null的時候才能利用=賦予值,上述的程式碼可以看到當a = 3時,??=不會更新a的值。

Operational spread operator: …?

...?可以檢查要append的List, Map, 和Set是否為null,如果是null就不append

void main(){
  List<int> lowerNumber = [1,2,3,4,5];
  List<int> upperNumbers = [6,8,9,0];
  lowerNumber = [...lowerNumber,...?upperNumbers];
  print('numbers are ${lowerNumber}');
}

output

numbers are [1, 2, 3, 4, 5, 6, 8, 9, 0]

但當我們加上一個空list

  List<int> listNull;
  lowerNumber = [...lowerNumber, ...?listNull];
  print('new list are ${lowerNumber}');

output

Error compiling to JavaScript:
Info: Compiling with sound null safety
lib/main.dart:5:37:
Warning: Operand of null-aware operation '...?' has type 'List<int>' which excludes null.
 - 'List' is from 'dart:core'.

利用...?加入空list會發生錯誤,map和set同理,因此當我們使用...?可以快速檢查接下來要加的collection是否為空

Conditional property access: ?.

接下來是flutter裡使用率很高的一種operator, ?.可以保護空物件裡的method或property的存取

myObject?.someProperty

上述程式碼等同於:

(myObject != null) ? myObject.someProperty : null

如果物件或物件的property為null,那使用?.會使其回傳null並且不呼叫那個空物件或property用到的相關method

結論

今天介紹了一些方便的null相關的operator,在開發App時常常會使用物件,當我們使用?去檢查null時也可以保護變數為null時的存取,希望大家喜歡今天的文章。

參考資料:
https://dart.dev/codelabs/dart-cheatsheet
https://www.geeksforgeeks.org/dart-null-aware-operators/#:~:text=Null%2Daware%20operators%20are%20used,is%20initialized%20with%20nothing%20like.


上一篇
dart&flutter學習之旅-Day01
下一篇
dart&flutter學習之旅-Day03
系列文
dart&flutter學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言