作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)
2011年10月10日的GOTO大會上,谷歌的兩位工程師發(fā)布了“Dart”;Dart是一種全新的編程語言,旨在幫助開發(fā)者構(gòu)建Web應用程序恨旱。Dart 1.0于2013年11月14日發(fā)布。我們?nèi)粘i_發(fā)Flutter使用的就是Dart語言坝疼,所以我們有必要了解一下Dart語言的使用方法搜贤。
文章首發(fā)地址
類型安全的語言
Dart 語言是類型安全的語言,但是由于其支持類型推斷钝凶,因此大多數(shù)變量不需要顯式地指定類型:
例如
/// 初始化一個字符串
var name = 'Fulade';
/// Int類型
var year = 1995;
/// 浮點數(shù)類型
var antennaDiameter = 3.7;
/// 數(shù)組
var list = ['Java', 'Python', 'C++', 'C'];
/// 字典類型
var image = {
'tags': ['土星'],
'url': '//path/to/saturn.jpg'
};
變量
下面的示例代碼將創(chuàng)建一個變量并將其初始化:
var name = 'Fulade';
變量僅存儲對象的引用仪芒。
這里名為 name 的變量存儲了一個 String
類型對象的引用,'Fulade'
則是該對象的值耕陷。
name
變量的類型被推斷為 String
掂名,但是你可以為其指定類型。
如果一個對象的引用不局限于單一的類型哟沫,可以將其指定為 Object
或 dynamic
類型饺蔑。
dynamic name = 'Bob';
除此之外你也可以指定類型:
String name = 'Bob';
默認值
在 Dart 中,未初始化的變量擁有一個默認的初始化值:null
嗜诀。即便數(shù)字也是如此膀钠,因為在 Dart 中一切皆為對象,數(shù)字也不例外裹虫。
int lineCount;
if(lineCount == null) {
print("line is null");
}
Final 和 Const
如果你不想更改一個變量,可以使用關鍵字 final
或者 const
修飾變量融击,這兩個關鍵字可以替代 var
關鍵字或者加在一個具體的類型前筑公。一個 final
變量只可以被賦值一次;一個 const
變量是一個編譯時常量(const
變量同時也是 final
)尊浪。被final
修飾的變量在第一次使用的時候被初始化匣屡。
下面的示例中我們創(chuàng)建并設置兩個 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
關鍵字不僅僅可以用來定義常量券躁,還可以用來創(chuàng)建常量值,該常量值可以賦予給任何變量。你也可以將構(gòu)造函數(shù)聲明為 const
的也拜,這種類型的構(gòu)造函數(shù)創(chuàng)建的對象是不可改變的以舒。
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.)