Hello World

上一堂課我們示範如何建立第一支 Dart 程式,接下來要手把手教你自行撰寫 Hello World 範例。

1 Hello World

  1. Dart 程式必須具備頂層 main() 函式,程式會從此處開始執行
  2. 沒有回傳值的函式要標註 void
  3. print() 用於在主控台輸出文字
// 程式進入點
void main() {
  print('Hello, World!');
}
Code language: Dart (dart)

延續上一堂課建立的專案,開啟路徑 C:\dartdemo\firstdart\bin 底下的 firstdart.dart 檔案

將檔案內的程式碼替換成上方範例

接著開啟 CMD,切換至 C:\dartdemo\firstdart 目錄,執行 dart run 指令

C:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Hello, World!Code language: CSS (css)

2 變數(var 自動推斷型別)

  1. 使用 var 宣告變數,Dart 會依據賦值內容自動判斷型別,不用手動標註型別名稱
  2. 支援字串、整數、浮點數、陣列、字典(物件)等資料型別

範例

// 程式進入點
void main() {
        var name = '旅行者一號';    // 字串 String
	var year = 1977;           // 整數 int
	var width = 3.7;           // 浮點數 double
	var planets = ['木星','土星']; // 陣列 List
	var info = {
	  'tag': ['土星'],
	  'url': '圖片網址'
	}; // 字典 Map
}
Code language: Dart (dart)

上面我們宣告了數個變數,變數的用途是存放資料,概念上等同一塊記憶體空間,我們替這塊空間取一個名稱,後續就能透過名稱操作該記憶體。

記憶體本質上只能存放由 0、1 組成的二進位資料,電腦所有資訊都由 0 與 1 構成。之所以會區分出字串、整數等不同型別,是為了方便程式解讀資料;例如編譯器辨識為 int 時,就會以整數規則讀取這段記憶體內容。

如果要操作上面宣告的變數,可以參考以下寫法

// 程式進入點
void main() {
  var name = '旅行者一號';    // 字串 String
  var year = 1977;           // 整數 int
  var width = 3.7;           // 浮點數 double
  var planets = ['木星', '土星']; // 陣列 List
  var info = {
    'tag': ['土星'],
    'url': '圖片網址'
  }; // 字典 Map

  // 字串操作範例
  print('探測器名稱:$name');
  print('名稱長度:${name.length}');
  print('是否包含「號」字:${name.contains('')}');

  // 整數操作範例
  print('發射年份:$year');
  print('至今已過:${DateTime.now().year - year} 年');

  // 浮點數操作範例
  print('探測器寬度:$width 公尺');
  print('寬度平方:${width * width}');

  // 陣列操作範例
  print('目標行星清單:$planets');
  planets.add('天王星'); // 新增陣列元素
  print('更新後行星清單:$planets');
  print('第一個目標:${planets[0]}');

  // 字典操作範例
  print('分類標籤:${info['tag']}');
  print('圖片網址:${info['url']}');
  info['status'] = '運行中'; // 新增鍵值配對
  print('完整資訊:$info');
}
Code language: PHP (php)

範例當中使用了格式化輸出,這部分內容後續會詳細說明,讀者先簡單看懂即可。

3 流程控制敘述(判斷 / 迴圈)

if else 判斷式

程式會依據 if 後括號內的條件執行對應程式區塊;若條件成立(true),執行 if 大括號內程式,不成立則執行 else 內的程式。

if (條件) {
  // 條件為 true 時執行此區塊
} else {
  // 條件為 false 時執行此區塊
}Code language: JavaScript (javascript)

舉例:判斷車輛是否超速,寫法如下。

var speed = 25;

if (speed > 60) {
  print('超速囉!');
} else {
  print('行駛速度正常。');
}Code language: PHP (php)

也可以連續多層條件判斷

if (speed > 100) {
  print('危險超速!');
} else if (speed > 60) {
  print('速度偏快。');
} else {
  print('安全行駛。');
}Code language: PHP (php)
void main() {
	var year = 1977;
	if (year >= 2001) {
	  print('21世紀');
	} else if (year >= 1901) {
	  print('20世紀');
	}
}
Code language: Dart (dart)
C:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
20世紀Code language: CSS (css)
for 走訪陣列(for-in)

在 Dart 中,for‑in 是簡潔的迴圈語法,專門用來逐一走訪 ListSet 或是其他可迭代物件。

會持續檢查陣列/清單是否還有下一個元素,有元素就執行大括號內程式,無剩餘元素則離開迴圈,執行後續程式。

語法格式如下:

for (var item in collection) {
  // 使用 item 變數操作當前元素
}Code language: JavaScript (javascript)

實際範例

void main() {
	var planets = ['木星','土星'];
	for (final item in planets) {
	  print(item);
	}
}
Code language: Dart (dart)

執行輸出結果

C:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
木星
土星Code language: CSS (css)
一般數值 for 迴圈

範例從 i=1 開始執行,條件 i <=12 代表包含數字12;每次執行完 print 後,會執行 i++ 遞增變數。

void main() {
	for (int i = 1; i <= 12; i++) {
	  print(i);
	}
}Code language: JavaScript (javascript)

執行輸出結果

C:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
1
2
3
4
5
6
7
8
9
10
11
12Code language: CSS (css)
  1. 先執行 int i = 1 初始化變數
  2. 接著判斷條件 i <=12 是否成立
  3. 條件成立則執行 print(i),輸出數字 1
  4. 隨後執行 i++,i 數值變為 2
  5. 再次判斷 i<=12,2<=12 為 true,繼續執行 print(i) 輸出 2
  6. 重複執行 i++ 與條件判斷流程
  7. ……持續重複
  8. 直到 i 等於13時,i<=12 條件不成立,直接離開 for 迴圈,執行後續程式

其中 int i=1; 僅在迴圈一開始執行一次,後續迭代不會重複執行;這段程式的作用僅為賦予 i 初始值,也可以改寫成下方格式

void main() {
    int i = 1;
	for (; i <= 12; i++) {
	  print(i);
	}
}
Code language: Dart (dart)

4. while 迴圈

while 迴圈概念與 for 迴圈相近,在 Dart 中,while 迴圈會在條件成立時持續重複執行同一區塊程式,語法十分簡潔:

while (條件) {
  // 迴圈主體程式
}Code language: JavaScript (javascript)

執行流程:

  1. 先判斷括號內條件是否為 true
  2. 若條件成立,執行迴圈主體。
  3. 執行完畢後再次檢查條件。
  4. 當條件變為 false 時,結束迴圈。

想要讓迴圈正常結束,必須在迴圈內修改相關變數,使條件最後變成 false;若沒有修改變數,會造成無限執行的死迴圈。

var year = 2010;
while(year < 2016){
  year += 1;
}
Code language: JavaScript (javascript)

以上程式拆解為完整執行步驟 👇

初始化階段
  • 宣告變數 year,初始數值設定為 2010
條件判斷階段
  • 檢查 year < 2016 是否成立。
  • 成立則進入迴圈主體;不成立則直接跳出迴圈。
執行迴圈主體
  • 執行 year += 1,等同 year = year + 1
  • 每一次迴圈都會將 year 數值加一。
重複判斷流程
  • 重新檢查條件 year < 2016
  • year 數值落在 2010~2015 時,條件皆成立。
  • year 增加至 2016 時,條件不成立,迴圈終止。

執行結束階段

  • 迴圈結束後,year 最終數值為 2016

這個迴圈總共執行 6 次(年份 2010 至 2015),每次將 year 加一,直到條件不成立為止。務必留意,若迴圈內沒有更新 year 的數值,程式會陷入無限迴圈。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *