【Flutter 1-7】Flutter教程Dart語言——變數
作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)
2011年10月10日的GOTO大會上,谷歌的兩位工程師釋出了“Dart”;Dart是一種全新的程式語言,旨在幫助開發者構建Web應用程式。Dart 1.0於2013年11月14日釋出。我們日常開發Flutter使用的就是Dart語言,所以我們有必要了解一下Dart語言的使用方法。
型別安全的語言
Dart 語言是型別安全的語言,但是由於其支援型別推斷,因此大多數變數不需要顯式地指定型別:
例如
/// 初始化一個字串 var name = 'Fulade'; /// Int型別 var year = 1995; /// 浮點數型別 var antennaDiameter = 3.7; /// 陣列 var list = ['Java', 'Python', 'C++', 'C']; /// 字典型別 var image = { 'tags': ['土星'], 'url': '//path/to/saturn.jpg' };
變數
下面的示例程式碼將建立一個變數並將其初始化:
var name = 'Fulade';
變數僅儲存物件的引用。
這裡名為 name 的變數儲存了一個 String
型別物件的引用,'Fulade'
則是該物件的值。
name
變數的型別被推斷為 String
,但是你可以為其指定型別。
如果一個物件的引用不侷限於單一的型別,可以將其指定為 Object
或 dynamic
型別。
dynamic name = 'Bob';
除此之外你也可以指定型別:
String name = 'Bob';
預設值
在 Dart 中,未初始化的變數擁有一個預設的初始化值:null
。即便數字也是如此,因為在 Dart 中一切皆為物件,數字也不例外。
int lineCount;
if(lineCount == null) {
print("line is null");
}
Final 和 Const
如果你不想更改一個變數,可以使用關鍵字 final
或者 const
修飾變數,這兩個關鍵字可以替代 var
關鍵字或者加在一個具體的型別前。一個 final
變數只可以被賦值一次;一個 const
變數是一個編譯時常量(const
變數同時也是 final
)。被final
修飾的變數在第一次使用的時候被初始化。
下面的示例中我們建立並設定兩個 final
變數:
final name = 'Bob'; // Without a type annotation final String nickname = 'Bobby';
你不能修改一個 final
變數的值:
name = 'Alice'; // Error: a final variable can only be set once.
使用關鍵字 const
修飾變量表示該變數為 編譯時常量。如果使用 const
修飾類中的變數,則必須加上 static
關鍵字,即 static const
(注意:順序不能顛倒。在宣告 const
變數時可以直接為其賦值,也可以使用其它的 const
變數為其賦值:
const bar = 1000000; // 直接賦值 [Unit of pressure (dynes/cm2)]
const double atm = 1.01325 * bar; // 利用其它 const 變數賦值 (Standard atmosphere)
const
關鍵字不僅僅可以用來定義常量,還可以用來建立常量值,該常量值可以賦予給任何變數。你也可以將建構函式宣告為 const
的,這種型別的建構函式建立的物件是不可改變的。
var foo = const [];
final bar = const [];
const baz = []; // 相當於 `const []` (Equivalent to `const []`)
如果使用初始化表示式為常量賦值可以省略掉關鍵字 const
,比如上面的常量 baz
的賦值就省略掉了 const
沒有使用 final
或 const
修飾的變數的值是可以被更改的,即使這些變數之前引用過 const
的值。
foo = [1, 2, 3]; // foo 的值之前為 const [] (Was const [])
常量的值不可以被修改:
baz = [42]; // 報錯:常量不可以被賦值。(Error: Constant variables can't be assigned a value.)