我們假定你已經知道如何用另一種語言程式設計,《Dart語言之旅》將向你展示瞭如何使用每個主要的Dart特性——從變數和運算子到類和庫。
要了解有關Dart核心庫的更多資訊,請參閱Dart圖書館之旅。
提示: 你可以使用DartPad執行這些功能中的絕大部分(瞭解更多)。
無論何時,只要你想了解有關Dart語言的更多詳細資訊,請參閱Dart語言規範。
一個基本的Dart程式
下面的程式碼使用了許多Dart最基本的功能:
// Define a function.
printNumber(num aNumber) {
print('The number is $aNumber.'); // Print to console.
}
// This is where the app starts executing.
main() {
var number = 42; // Declare and initialize a variable.
printNumber(number); // Call a function.
}
複製程式碼
以下是適用於所有(或者說是幾乎所有)的Dart應用程式的語法:
-
// This is a comment.
使用
//
表示改行的後面部分是註釋。或者也可以使用/* ... */
。更多詳細內容,請看註釋 -
num
一種內建型別,其他的內建型別是String,int和bool。
-
42
數字。數字在編譯時是常量。
-
print()
一個方便的輸出顯示方式。
-
'...'
(或"..."
)字串。
-
$variableName (或 ${expression})
字串插值:在字串中包含一個變數或表示式的字串。有關更多資訊,請參閱字串。
-
main()
應用程式執行的開始,是一個特殊的,必需的頂級函式。有關更多資訊,請參閱main()函式。
-
var
一種不指定型別的宣告變數的方法。
注意: 我們的程式碼遵循Dart風格指南中的約定。例如,我們使用雙空格縮排。
重要概念
當你學習Dart語言時,記住這些事實和概念:
-
你可以放在變數中的所有東西都是一個 object,每個物件都是一個 class 的例項。偶數,函式和
null
都是物件。所有物件都繼承自Object類。 -
指定靜態型別(例如前面示例中的
num
)可以闡明你的意圖並啟用靜態工具檢查。 (你可能會注意到當你除錯程式碼時,沒有指定型別的變數會獲得特殊型別:dynamic
。)在Dart 1.x中指定靜態型別是可選的,但是Dart正朝著型別安全的語言發展。 -
在強模式(strong mode)下,靜態和執行時會檢查確保你的程式碼是型別安全的,幫助你在開發中而不是執行時就捕獲錯誤。在Dart 1.x中強模式是可選的,但在Dart 2中不可選。
-
在執行之前,Dart會解析所有的程式碼。你可以向Dart提供提示(例如,通過使用型別或編譯時常量)來捕獲錯誤或使你的程式碼更快地執行。
-
Dart支援頂級函式(如
main()
),以及與類或物件繫結的函式(分別為 static 和 instance 方法)。你也可以在函式中建立函式(巢狀函式_或_區域性函式)。 -
同樣,Dart支援頂級變數以及繫結到類或物件(靜態變數和例項變數)的變數。例項變數有時稱為欄位或屬性。
-
與Java不同,Dart沒有
public
,protected
和private
關鍵字。如果識別符號以下劃線(_)開頭,則它是私有的。有關詳細資訊,請參閱庫和可見性。 -
識別符號可以以字母或_開頭,然後是這些字元和數字的任意組合。
-
有時候重要的是某件事是一種_表達(expression)還是一種_陳述(statement),所以我們會對這兩個詞做精確的描述。
-
Dart工具可以報告兩種問題:警告和錯誤。警告只是表明你的程式碼可能無法正常工作,但它們不會阻止你的程式執行。錯誤可以是編譯時錯誤或執行時錯誤:編譯時錯誤導致程式碼無法執行,執行時錯誤導致程式碼執行時引發異常。
-
Dart 1.x有兩種執行模式:生產和檢查。我們建議你在檢查模式下開發和除錯,然後在生產模式部署。生產模式是Dart程式的預設執行模式,它針對速度進行了優化。生產模式會忽略斷言語句和靜態型別。檢查模式是一種開發友好模式,可幫助你在執行時捕獲某些型別的錯誤。例如,如果你將一個非數字變數傳入一個
num
型別的值,則檢查模式會丟擲一個異常。
Dart 2的提示: Dart 2中移除了檢查模式。更多資訊請看Dart 2升級。
關鍵字
下表列出了Dart語言會特別處理的詞語。
abstract1 | deferred1 | if | super |
as1 | do | implements1 | switch |
assert | dynamic1 | import1 | sync*2 |
async2 | else | in | this |
async*2 | enum | is | throw |
await2 | export1 | library1 | true |
break | external1 | new | try |
case | extends | null | typedef1 |
catch | factory1 | operator1 | var |
class | false | part1 | void |
const | final | rethrow | while |
continue | finally | return | with |
covariant1 | for | set1 | yield2 |
default | get1 | static1 | yield*2 |
1 帶上標 1 的單詞是內建識別符號。避免使用內建識別符號作為你自己的自定義識別符號。如果你嘗試為類或型別名稱使用內建識別符號,則會發生編譯時錯誤。
2 帶有上標 2 的單詞是Dart 1.0版本之後新增的與非同步支援相關的更新,有限的保留字。你不能使用async
,await
或yield
作為你自己的自定義識別符號,也不能在任何函式體中使用async
,async *
或sync *
標記。有關更多資訊,請參見非同步支援。
關鍵字表中的所有其他字都是保留字。你不能使用保留字作為識別符號。
NEXT