簡體   English   中英

dart有什么區別? 和? 對於可空類型?

[英]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 作為開始。

這是一個很好的問題,答案就在這里。 “?” 這意味着它將在以后獲得價值,或者它可以為空(最初或在任何情況下)例如

細繩? 車名;

  1. '.' 這意味着您將收到該值,它不能是 null。如果值為 null,它將檢查該值,它將給出異常。

查看示例以了解明顯的區別:

列表? 塊; ... // 您不確定 blocks 變量是否已初始化。 // 塊可以為空。 最終塊? block = blocks?.first;

// 你確定 blocks 變量已經初始化。 // 塊不可為空。 final Block block = blocks.;first;

如果是,希望你明白了 如果你有問題,請接受答案或評論我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM