簡體   English   中英

如何在dart中定義頂級變量並對其進行斷言?

[英]How to define a variable on top level and also assert it , in dart?

在dart文件中,我可以通過為其指定一個值(或表達式)來定義頂級變量:

String name = getNameFromSomewhere();

但是在某些情況下,我需要聲明一個有效名稱,因此我想:

String name = {
    String _name = getNameFromSomewhere();
    if(_name == null) {
        throw new Exception("Name is invalid");
    }
    return _name;
}

但是語法無效,相反,我必須使其成為函數並調用:

String name = (() {
    String _name = getNameFromSomewhere();
    if(_name == null) {
        throw new Exception("Name is invalid");
    }
    return _name;
})();

但是代碼不是那么易讀,是否有任何改進方法?

在Dart中,也不必在()包裝IIFE,因此您可以用這種方式清理語法。 您還可以隱藏name綁定並跳過私有本地。 最后,假設var getNameFromSomewhere()具有帶注釋的返回類型,可以使用var ,該類型將正確地推斷為String。

String name = () {
 var name = getNameFromSomewhere();
 if (_name == null)
   throw new Exception("Name is invalid");
 return name;
}();

現在,根據您要執行的操作,它可能無法按預期工作。 在Dart中,所有頂級成員和靜態字段都被延遲初始化。 在這種情況下,除非首次訪問name ,否則不會引發異常。 例如,以下代碼將不會拋出。

void main() {}

String getNameFromSomeWhere() => null;

String name = ...;

但是這段代碼會

void main() {
  print(name);
}

String getNameFromSomeWhere() => null;

String name = ...;

我將初始化程序設為私有函數,僅出於可讀性或在子類中進行覆蓋:

String name = _getValidName();
String _getValidName () {
  var name = _getNameFromSomewhere();
  if (name == null)
    throw new Exception("Name is invalid");
  return name;
};
String _getNameFromSomewhere () { ... }

暫無
暫無

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

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