本頁向您展示了如何使用每個主要的Dart特性,從變量和運算符到類和庫,假定您已經知道如何用另一種語言程式設計。
要了解有關Dart核心庫的更多資訊,請參閱 Dart Library之旅。無論何時您想了解有關語言功能的更多詳細資訊,請參閱 Dart語言規範。
一個基本的dart程式
以下代碼使用了Dart最基本的許多功能:
// 定義一個函數.
printInteger(int aNumber) {
print('The number is $aNumber.'); // 列印到工作台
}
//這是應用程式開始執行的地方.
main() {
var number = 42; // 聲明并初始化一個變量
printInteger(number); // 調用一個函數.
}
以下是适用于所有(或幾乎所有)Dart應用程式的寫法:
// 單行注釋
//此外dart還支援多行注釋和文檔注釋,詳情見後面
int //int類型,其他一些内置類型是String,List bool
42 //數字,數字是一種編譯時常量
print() //一種很友善的列印方法
'......' or"......" //這兩種都是表示字元串
$variableName (or ${expression})
//字元串插值:在字元串文字中包含一個變量或表達式的字元串。有關更多資訊,請參閱字元串。
main() //一個應用程式執行開始的特殊的、必須的函數,詳情檢視main函數
var //聲明變量但不指定類型
重要概念
當你了解Dart語言時,要牢記這些事實和概念:
- 你可以放在變量中的所有東西都是一個對象,每個對象都是一個類的執行個體。即使是數字,功能, null也是對象。所有對象都從Object類繼承。
- 雖然Dart是強類型的,但類型注釋是可選的,因為Dart可以推斷類型。在上面的代碼中,number 被推斷為是類型的int。當你想明确地說沒有類型時, 使用特殊類型dynamic。
- Dart支援泛型類型,如List<int>(整數清單)或List<dynamic>(任何類型的對象清單)。
- Dart支援頂層函數(如main()),以及與類或對象綁定的函數(分别為靜态方法和執行個體方法)。你也可以在函數中建立函數(嵌套函數或局部函數)。
- 同樣,Dart支援頂級變量以及綁定到類或對象(靜态變量和執行個體變量)的變量。執行個體變量有時稱為字段或屬性。
- 與Java,dart不具備關鍵字public,protected和private。如果辨別符以下劃線(_)開頭,則它的庫是私有的。有關詳細資訊,請參閱 庫和可見性。
- 辨別符可以以字母或下劃線(_)開頭,然後是這些字元和數字的任意組合。
- 有時候,重要的是某件事是一種表達式還是一種 聲明,是以這兩個詞的确切含義很有幫助。
- Dart工具可以報告兩種問題:warnings 和errors。警告隻是表明您的代碼可能無法正常工作,但它們不會阻止您的程式執行。錯誤可以是編譯時或運作時。編譯時錯誤導緻代碼無法執行; 運作時錯誤導緻 代碼執行時引發異常。
關鍵詞
下表列出了Dart語言特别處理的關鍵詞。
abstract | do | import | super |
---|---|---|---|
abstract1 | do | import 1 | super |
as 1 | dynamic 1 | in | switch |
assert | else | interface 1 | sync* 2 |
async 2 | enum | is | this |
async* 2 | export 1 | library 1 | throw |
await 2 | external 1 | mixin 1 | true |
break | extends | new | try |
case | factory 1 | null | typedef 1 |
catch | false | operator 1 | var |
class | final | part 1 | void |
const | finally | rethrow | while |
continue | for | return | with |
covariant 1 | get 1 | set 1 | yield 2 |
default | if | static 1 | yield* 2 |
deferred 1 | implements 1 |
1帶上标1的單詞是内置辨別符。
避免使用内置辨別符作為辨別符。
如果您嘗試為類或類型名稱使用内置辨別符,則會發生編譯時錯誤。
2帶上标2的單詞是較新的,與Dart 1.0版本釋出後添加的異步支援相關的有限保留字。
您不能使用async,await或yield作為用async,async 或sync 标記的任何函數體中的辨別符。
有關更多資訊,請參見異步支援
**關鍵字表中的所有其他字都是保留字。
您不能使用保留字作為辨別符**
變量
以下是建立變量并初始化變量的示例:
var name ='Bob';
變量存儲的是引用,命名為name的變量存儲的是 值為"Bob"的字元創的一個引用
name變量的類型被推斷為String,但您可以通過指定它來更改該類型。
如果對象不限于單一類型,請遵循設計指南指定對象或動态類型
dynamic name ='Bob';
另一種選擇是顯式聲明将被推斷的類型
String name = 'Bob';
預設值
未初始化的變量的初始值為null。即使數字類型的變量最初為null,因為數字 - 和Dart中的其他所有資料一樣 - 都是對象。
int lineCount;
assert(lineCount == null);
注意:assert()産品代碼中 的調用被忽略。在開發過程中, 除非條件為真,否則會引發異常。有關詳細資訊,請參閱Assert。assert(condition)
Final和const
如果你從不打算改變一個變量,使用final或者const,而不是var或者其他類型。最終的變量隻能設定一次; 一個const變量是一個編譯時常量。(Const變量隐式final 。)final的頂層或者class變量在它第一次被使用時被初始化。
注意: 執行個體變量可以final但不是const。
以下是建立和設定最終變量的示例:
final name = 'Bob'; // 沒有類型聲明
// name = 'Alice'; // 取消注釋會導緻UC哦嗚
final String nickname = 'Bobby';
将const用于想要成為編譯時常量的變量。
如果const變量處于類級别,則将其标記為靜态常量。
在聲明該變量的位置,将該值設定為編譯時常量,例如數字或字元串文字,常量變量或常數上算術運算的結果:
const bar = 1000000; // 壓力機關(dynes/cm2)
const double atm = 1.01325 * bar; // 标準大氣壓
該const關鍵字不隻是聲明常數變量。您也可以使用它來建立常量值,以及聲明建立常量值的構造函數。任何變量都可以有一個常量值。
// Note: [] 建立一個空的list
// const [] 建立一個空的, 一成不變的list (簡寫為EIL).
var foo = const []; // foo 目前是一個 EIL(empty immutabe list).
final bar = const []; // bar 将永遠是 EIL.
const baz = const []; // baz 是一個編譯時常量 EIL.
// You can change the value of a non-final, non-const variable,
// even if it used to have a const value.
foo = [];
// You can't change the value of a final or const variable.
// bar = []; // Unhandled exception.
// baz = []; // Unhandled exception.