[Dart]Dart語言之旅<一>:簡介

GarLin發表於2018-03-09

我們假定你已經知道如何用另一種語言程式設計,《Dart語言之旅》將向你展示瞭如何使用每個主要的Dart特性——從變數和運算子到類和庫。

要了解有關Dart核心庫的更多資訊,請參閱Dart圖書館之旅

提示: 你可以使用DartPad執行這些功能中的絕大部分(瞭解更多)。

開啟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()),以及與類或物件繫結的函式(分別為 staticinstance 方法)。你也可以在函式中建立函式(巢狀函式_或_區域性函式)。

  • 同樣,Dart支援頂級變數以及繫結到類或物件(靜態變數和例項變數)的變數。例項變數有時稱為欄位或屬性。

  • 與Java不同,Dart沒有publicprotectedprivate關鍵字。如果識別符號以下劃線(_)開頭,則它是私有的。有關詳細資訊,請參閱庫和可見性

  • 識別符號可以以字母或_開頭,然後是這些字元和數字的任意組合。

  • 有時候重要的是某件事是一種_表達(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版本之後新增的與非同步支援相關的更新,有限的保留字。你不能使用asyncawaityield作為你自己的自定義識別符號,也不能在任何函式體中使用asyncasync *sync *標記。有關更多資訊,請參見非同步支援

關鍵字表中的所有其他字都是保留字。你不能使用保留字作為識別符號。


NEXT

[Dart]Dart語言之旅<二>:變數

相關文章