變量是一個(gè)引用,根據(jù)Dart中“萬(wàn)物皆對(duì)象”原則,即變量存儲(chǔ)的都是對(duì)象的引用,或者說(shuō)它們都是指向?qū)ο?
聲明可以有兩種方式,一種是不指定類型,即使用var關(guān)鍵字
var name = 'Bob';
另一種是明確指定類型(Optional types)
String name = 'Bob';
因?yàn)橛蓄愋屯茖?dǎo),所以兩種實(shí)現(xiàn)效果一樣,官方推薦在函數(shù)內(nèi)的本地變量盡量使用var聲明。
在變量類型并不明確的情況下,可以使用dynamic關(guān)鍵字
dynamic name = 'Bob';
未初始化的變量默認(rèn)值是 null。即使變量是數(shù)字類型默認(rèn)值也是 null,因?yàn)樵?Dart 中一切都是對(duì)象,數(shù)字類型也不例外。
int lineCount;
assert(lineCount == null);
提示: 在生產(chǎn)環(huán)境代碼中 assert() 函數(shù)會(huì)被忽略,不會(huì)被調(diào)用。 在開(kāi)發(fā)過(guò)程中, assert(condition) 會(huì)在非 true 的條件下拋出異常。
使用過(guò)程中從來(lái)不會(huì)被修改的變量, 可以使用 final 或 const,而不是 var 或者其他類型,F(xiàn)inal 變量的值只能被設(shè)置一次; Const 變量在編譯時(shí)就已經(jīng)固定 (Const 變量 是隱式 Final 的類型) 。最高級(jí) final 變量或類變量在第一次使用時(shí)被初始化。
提示: 實(shí)例變量可以是 final 類型但不能是 const 類型。 必須在構(gòu)造函數(shù)體執(zhí)行之前初始化 final 實(shí)例變量 —— 在變量聲明中,參數(shù)構(gòu)造函數(shù)中或構(gòu)造函數(shù)的初始化列表中進(jìn)行初始化。
創(chuàng)建和設(shè)置一個(gè) Final 變量:
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
final 不能被修改:
name = 'Alice'; // Error: 一個(gè) final 變量只能被設(shè)置一次。
如果需要在編譯時(shí)就固定變量的值,可以使用 const 類型變量。 如果 Const 變量是類級(jí)別的,需要標(biāo)記為 static const。 在這些地方可以使用在編譯時(shí)就已經(jīng)固定不變的值,字面量的數(shù)字和字符串, 固定的變量,或者是用于計(jì)算的固定數(shù)字:
const bar = 1000000; // 壓力單位 (dynes/cm2)
const double atm = 1.01325 * bar; // 標(biāo)準(zhǔn)氣壓
Const 關(guān)鍵字不僅可以用于聲明常量變量。 還可以用來(lái)創(chuàng)建常量值,以及聲明創(chuàng)建常量值的構(gòu)造函數(shù)。任何變量都可以擁有常量值。
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`
聲明 const 的初始化表達(dá)式中 const 可以被省略。
非 Final,非 const 的變量是可以被修改的,即使這些變量曾經(jīng)引用過(guò) const 值。
foo = [1, 2, 3]; // 曾經(jīng)引用過(guò) const [] 常量值。
Const 變量的值不可以修改:
baz = [42]; // Error: 常量變量不能賦值修改。
更多建議: