[英]In dart what is the difference between ? and ! for nullable types?
我是 Dart 和 Flutter 的新手。
在dart中使用有什么區別? 和? 對於可為空的類型?
validator: ((value) {
if (value?.isEmpty) {
return "Field is required";
}
return null;
}),
validator: ((value) {
if (value!.isEmpty) {
return "Field is required";
}
return null;
}),
提前致謝!
關於它的好話題: Dart中的Null Safety是什么?
但簡而言之,您使用“?” 當您想允許該值為 null 並相應地使用它時,如下所示:
String? test;
if (test?.isEmpty == true) { // And is not null, but you don't need to check it
// If null, will never pass there but without error
}
當你想確保有一個不可空的值時使用“,”:像這樣:
String? test;
if (test!.isEmpty == true) { // Will throw an error
...
}
兩者的區別,一個初始可以是null,另一個不能。
我希望你能理解下面的例子。
指定變量可以是null,那么可以使用nullable類型?
運算符,讓我們看一個例子:
String? carName; // initialized to null by default
int? value = 36; // initialized to non-null
value = null; // can be re-assigned to null
注意:您不需要在使用前初始化可空變量。 默認初始化為null。
斷言運算符 (!)
使用 null 斷言運算符 (.) 使 Dart 將可空表達式視為不可空表達式(如果您確定它不為空)。
int? someValue = 30;
int data = someValue!; // This is valid as value is non-nullable
在上面的例子中,我們告訴 Dart 變量 someValue 是 null,將它賦值給一個不可為 null 的變量即 data 是安全的
我希望你明白????
至於你的例子;
如果你注意到,驗證器 {String? value} 值最初可以是 null。但是您編寫的代碼中兩者之間的唯一區別是運行成本。 “?” 重新定義它會花費一些時間。 因為在 function 中已經說明了,它將以 null 作為開始。
這是一個很好的問題,答案就在這里。 “?” 這意味着它將在以后獲得價值,或者它可以為空(最初或在任何情況下)例如
細繩? 車名;
查看示例以了解明顯的區別:
列表? 塊; ... // 您不確定 blocks 變量是否已初始化。 // 塊可以為空。 最終塊? block = blocks?.first;
// 你確定 blocks 變量已經初始化。 // 塊不可為空。 final Block block = blocks.;first;
如果是,希望你明白了 如果你有問題,請接受答案或評論我
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.