簡體   English   中英

在 Dart 的條件語句中使用變量 Boolean

[英]Using variable as Boolean in conditional statement in Dart

我在從 Python 學習 Dart 之后,我想知道 Dart 最接近於在條件語句中使用非布爾變量作為 Boolean 的條件是什么。 就像使用空字符串為false而非空字符串為true的字符串一樣。

例如,在 Python 中:

name = 'Yes'

print('True' if name else 'False') // 'True'

name2 = ''

print('True' if name else 'False') // 'False'

Dart 是否有類似的東西而不必將變量轉換為 Boolean 語句?

我認為這樣的代碼甚至不會編譯。 dart中的類型檢查往往非常嚴格,每當編譯嘗試評估非bool類型的條件時,都會引發錯誤。 例如,以下內容不會編譯:

final String value = "truthyValue" ? "truth" : "dare";

相反, dart在許多內置類型(如字符串、不同容器等)上提供了isNonEmptyisEmpty方法,因此您可以執行類似someString.isNotEmpty? "good": "bad"; someString.isNotEmpty? "good": "bad"; .

Dart無法在測試中使用非布爾值。 沒有任何。 做不到。

測試位置中允許的唯一表達式是具有 static 類型的表達式:

  • bool
  • dynamic的(隱式向下轉換為bool ,就好像后面跟着as bool ,如果它實際上不是bool ,則會在運行時拋出。)
  • Never ,它總是在產生值之前拋出。

bool類型,在非空安全代碼中可以評估為null 如果發生這種情況,測試也會在運行時拋出。

因此,對於任何測試,如果測試表達式的計算結果不是bool ,它就會拋出。 您只能在實際的bool truefalse上進行分支。

如果你有一個值,你想將null和空都視為假,我會這樣做: if (value?.isEmpty?? false)...

如果您需要處理特定值(例如“0”或“00000”),您可以在任何類型上編寫擴展。 我非常喜歡它,因為它對任何解析都很方便,而且如果你把它命名得好,它是可讀的。

extension BoolTest on String? {
  bool get toBool {
    if (this == null) {
      return false;
    } else {
      return true;
    }
  }
}

然后你只需像這樣使用它:

String? a = 'hello';
String? b;
print(a.toBool);      // true
print(b.toBool);      // false
print('hello'.toBool) // true

看看: https://dart.dev/guides/language/extension-methods

暫無
暫無

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

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