[TOC]
這里有一個創建變量并初始化它的例子:
~~~
var name = 'Bob';
~~~
變量存儲引用。名為name的變量包含對字符串對象的引用,值為“Bob”。
name變量的類型被推斷為String,但是您可以通過指定它來更改該類型。如果對象不限于單一類型,請按照[設計指導]原則指定對象 (Object)或動態(dynamic)類型。
~~~
dynamic name = 'Bob';
~~~
另一種方法是顯式聲明要推斷的類型:
~~~
String name = 'Bob';
~~~
>注意:這個頁面遵循了對本地變量使用var而不是類型注解的風格指南建議。
>
## 默認值
未初始化的變量的初始值為null。甚至具有數字類型的變量最初也是null,因為數字——就像dart中的其他東西一樣——是對象。
~~~
int lineCount;
assert(lineCount == null);
~~~
>注意:在生產環境中,assert()調用被忽略。在開發環境中當assert(condition) 的condition條件不為真時拋出一個異常。詳細信息請查看[ Assert]。
>
## Final 和 const修飾符
如果您從未打算更改一個變量,請使用final或const修飾他,而不是使用var或其他變量類型。最終變量只能設置一次;const變量是一個編譯時常數。(Const變量是隱式最終變量。)最終的頂級或類變量在第一次使用時被初始化。
>注意:實例變量可以是final,但不能是const。[*實例變量定義在對象一級,它可以被類中的任何方法或者其他類中的方法訪問,但是不能被靜態方法訪問。*]
>
這里有一個創建和設置final變量的例子:
~~~
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
~~~
您無法更改final變量的值:
~~~
name = 'Alice'; // Error: a final variable can only be set once.
//這個是錯誤示例,在使用時final變量是不可以更改的
~~~
對于想要在編譯時確定并且不再變的變量,使用const。如果const變量位于類級別,則將其標記為靜態const。在聲明該變量時,將該值設置為編譯時常量,例如數字或字符串字面量、const變量或常量數字算術運算的結果:
~~~
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
~~~
const關鍵字不只是聲明常量變量。您還可以使用它來創建常量值,以及聲明創建常量值的構造函數。任何變量都可以賦一個常量值。
~~~
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`
~~~
您可以從const聲明的初始化表達式中省略const,如上面的baz。有關細節,請參見[不要多余的使用const]。
您可以更改一個非final的非const變量的值,即使它曾經有一個const值:
~~~
foo = [1, 2, 3]; // Was const []
~~~
你不能改變const變量的值:
~~~
baz = [42]; // Error: Constant variables can't be assigned a value.
~~~
有關使用const創建常量值的更多信息,請參見 [Lists], [Maps], 和 [Classes]。