[Dart]Dart語言之旅<二>:變數

GarLin發表於2018-03-09

變數

以下是建立變數併為其分配值的示例:

var name = 'Bob';
複製程式碼

變數是引用。名為name的變數包含對值為“Bob”的String型別的物件的引用。

預設值

未初始化的變數的初始值為null。即使是數字型別的變數,初始值也為null,因為數字也是物件。

int lineCount;
assert(lineCount == null);
// 變數(即使是數字)的初始值為 null 。
複製程式碼

Note: 生產模式中將忽略assert()的呼叫。在檢查模式下,除非 condition 為真,否則assert(condition)將丟擲一個異常。有關詳細資訊,請參閱Assert部分。

Dart 2的提示: Dart 2中移除了檢查模式。更多資訊請看Dart 2升級

可選的型別

Dart 2的提示: Dart 2中型別都是必選的,但是由於有型別推斷,你依然可以省略某些型別的宣告。更多資訊請看Dart 2升級

你可以選擇將靜態型別新增到變數宣告中:

String name = 'Bob';
複製程式碼

新增型別是清晰表達意圖的一種方式。諸如編寫者和編輯器之類的工具可以使用這些型別來幫助你,比如通過提供程式碼自動補全和對錯誤的預警。

注意: 本篇文章遵循樣式指南建議來使用var宣告區域性變數,而不採用標註型別的宣告方式。即使在強模式下,你也可以使用var——編譯器會盡可能的推斷型別。

final和const

如果你從不打算改變一個變數,使用finalconst來代替var,如果使用型別宣告變數,請在型別前新增finalconstfinal宣告的變數只能設定一次,一個const宣告的變數是一個編譯時常量。(const宣告的變數是隱式的final。)一個final宣告的頂級或者類的變數在它第一次被使用時被初始化。

注意: 例項變數可以是final,但不可以是const

這裡有一個建立並設定一個final變數的例子:

final name = 'Bob'; // 不使用型別宣告變數
// name = 'Alice';  // 取消前面註釋會導致錯誤
final String nickname = 'Bobby';
複製程式碼

將const用於想要成為編譯時常量的變數。如果const變數放在類一層級裡面(譯者注:即類的常量),則將其標記為static const。宣告變數為編譯時常量有多種形式,如數字或字串、const變數或常數上的算術運算結果:

const bar = 1000000; // 壓力單位 (dynes/cm2)
const double atm = 1.01325 * bar; // 標準氣壓
複製程式碼

const關鍵字不僅用於宣告常量,你也可以使用它來建立常量值,以及宣告建立常量值的建構函式。任何變數都可以有一個常量值。

// Note: [] 建立一個空list。
// const [] 建立一個空的不可變的list(EIL)。
var foo = const []; // foo當前是一個EIL。
final bar = const []; // bar將一直是一個EIL。
const baz = const []; // baz是一個編譯時EIL。

// 您可以更改沒有final也沒有const修飾的變數的值,即使它曾經有一個常量值。
foo = [];

// 您不能更改有final或有const修飾的變數的值。
// bar = []; // 未處理的異常。
// baz = []; // 未處理的異常。
複製程式碼

有關使用const建立常量值的更多資訊,請參閱listmapclasses


NEXT

[Dart]Dart語言之旅<三>:內建型別

相關文章