我正在研究 dart null 安全概念,我發現所有原則僅適用于靜態型別變數,例如 int a,而不適用于使用 'var' 關鍵字宣告的推斷型別。為什么空安全規則適用于使用“var”關鍵字創建的變數之一?我只想了解 dart 不處理型別推斷變數的原因。謝謝
uj5u.com熱心網友回復:
在我回答你的問題之前,這里是基本原則:
String? nullableString; // is currently null
String nonNullableString; // needs to be initialized, because it can′t be null
var myVariable; // will always be dynamic (see comment from jamesdlin)
var myVariable = "Hello World";
// var is non-nullable, since the non-nullable type String can be inferred
相比之下 type? variable; // variable can be null.
為什么 Dart Null 安全原則僅適用于靜態型別變數而不是型別推斷?
原因很簡單,Dart 會根據初始值來推斷 var 是可空型別還是不可空型別,所以你沒有理由寫“var?”之類的東西。可以說,Dart 基本上是在幕后處理型別推斷變數。
uj5u.com熱心網友回復:
我正在研究 dart null 安全概念,我發現所有原則僅適用于靜態型別變數,
int a例如,不適用于推斷使用var關鍵字宣告的變數的型別。
空安全概念確實適用于推斷型別:
int? f() => 42;
var x = f(); // The static type of `x` is `int?`.
確實,您目前無法var?明確宣告變數應使用推斷型別的可為空版本。這是 Dart 語言團隊已經考慮過并且仍然愿意添加的東西。看:
- https://github.com/dart-lang/language/issues/1238
- https://github.com/dart-lang/language/issues/1030
Lasse Nielsen 解釋道:
var?粗略地說,不支持的原因是?您在型別上添加的內容,而var不是type。它是一個出現而不是型別的宣告標記,例如final- 除了它final也可以與 at 型別組合,而var不能。
您想要使用的情況var?是如果您有一個非null初始值并且想要將該變數設定為null以后。在實踐中,我希望這些情況不是很常見,所以它不是一個優先功能。對于這種情況,您應該使用顯式型別(例如int? x = 42;)宣告變數。
如果你真的想避免輸入型別名,你可以應用Erik Ernst 的建議。例如:var x = null ?? 42;。
或者,您可以創建一個輔助函式:
T? makeNullable<T>(T object) => object;
var x = makeNullable(42);
但我個人認為這些方法過于矯枉過正,可讀性較差。
uj5u.com熱心網友回復:
Dart 為我們提供了各種選項來處理可空和不可空變數。當你很明顯時,Dart 要求我們使用型別注釋,我們可以使用 null 安全規則來使我們的代碼免受 null 的影響,并且我們可以var在有可能為 null 時使用關鍵字,并且防止 null 沒有意義,var因為它允許 null放入其中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410667.html
標籤:
上一篇:FlutterwithSqflite Getx資料更新問題
下一篇:URI的目標不存在:'package:flutter_intro_slider_example/home.dart',名稱'Slide'不是一個類
