---
# System prepended metadata

title: '[Video Note] [Dart] freeCodeCamp.org-Dart Programming Tutorial - Full Course'
tags: [Video Note, Dart]

---

# Setup
## Dart SDK 安裝
- Dart 是用於開發跨平台行動應用程式的語言，配合 Flutter 框架使用。
- 前往官方網站下載 Dart SDK，提供 Windows、Linux 和 macOS 版本。
- 根據作業系統選擇並安裝相應的版本。

## 編輯器選擇
- 可以使用任何編輯器編寫 Dart 程式碼，推薦使用 Visual Studio Code (VS Code)。
- 從 Visual Studio Code 官方網站下載適用的版本。

## 使用 DartPad
- 不想安裝 Dart SDK 或 Visual Studio Code 時，可以使用 DartPad 網頁編輯器。
- 網址為 dartpad.lang.org，能直接在網頁上編寫並執行程式碼。

## Visual Studio Code 設置
- 使用 Visual Studio Code 時，需要安裝 Dart 擴充功能來支援語法高亮顯示。
- 點擊「View」→「Extensions」，搜尋並安裝 Dart 擴充功能（版本 3.1.0）。

## 撰寫及執行 Dart 程式碼
- 創建 `.dart` 檔案並撰寫程式碼。
- 使用 Visual Studio Code 內建終端機執行程式碼。
- 點擊「Terminal」→「New Terminal」，輸入 `dart 檔案名稱.dart` 來執行程式碼。
# Fundamentals
## Dart 語言類型與編譯
- Dart 是靜態類型語言，變數類型在定義時就被確定，無法改變。
- 靜態類型：若定義為 `String`，無法賦予其他類型（如 `int` 或 `double`）。
- 動態類型：`dynamic` 類型可儲存任何類型的值。
- Dart 支援兩種編譯方式：
  - **AOT (Ahead of Time)**：在部署最終產品時，進行優化後的提前編譯。
  - **JIT (Just in Time)**：開發期間，程式即時編譯並執行。

## 變數定義與類型推斷
- Dart 支援類型推斷，使用 `var` 定義變數時，編譯器會自動推斷類型。
- 若明確指定類型（如 `String`），無法賦予其他類型的值。
- 範例：使用 `var` 定義字串變數時，Dart 會自動推斷變數類型為 `String`。

## Dart 程式基本結構
- Dart 程式以 `main` 函數開始執行。
- `void main()`：表示主函數不回傳任何值，`void` 是可選的。

## Dart 標準庫
- Dart 的核心功能（如內建類型、集合等）定義在 `dart:core` 中，會自動匯入。
- 通常不需手動匯入 `dart:core`，它已經包含在每個 Dart 程式中。

## 輸入與輸出操作
- 若需進行輸入輸出操作，需匯入 `dart:io` 庫。
- 使用 `stdout.write()` 提示使用者輸入，`stdin.readLineSync()` 接收輸入。
- 範例：使用字串插值（`$變數名`）將變數值嵌入字串中。

## 註解寫法
- 單行註解：`//`。
- 多行註解：`/* ... */`。
- 文件註解：使用 `///` 來撰寫文件註解，通常用於函數或類別的說明。
# Data Types
## 程式語言的類型
- **強型別語言**（如 C++、Java、Swift）：變數類型在編譯時就已確定。
- **動態型別語言**（如 Python、Ruby、JavaScript）：變數類型在執行時才確定。

## Dart 的基本資料類型
- **五種基本類型**：
  - `int`：整數
  - `double`：浮點數
  - `String`：字串
  - `bool`：布林值
  - `dynamic`：動態類型，允許在執行時更改變數的類型。

## 變數定義範例
- `int amount1 = 100;`：明確定義為整數。
- `var amount2 = 200;`：使用 `var`，Dart 會推斷變數類型為 `int`。
  - 若後續嘗試賦值其他類型（如 `double` 或 `String`），會出現錯誤。

## 型別推斷與類型安全
- 使用 `var` 定義變數時，Dart 會在編譯時自動推斷變數類型。
- 範例：
  - `double value1 = 10.5;`
  - `var value2 = 20.5;`（推斷為 `double`）。

## 字串與布林類型
- 字串範例：
  - `String name1 = "Mahmoud";`
  - `var name2 = "Asan";`（推斷為 `String`）。
- 布林值範例：
  - `bool isTrue1 = true;`
  - `var isTrue2 = false;`（推斷為 `bool`）。

## 動態類型 (`dynamic`)
- `dynamic` 允許在執行時更改變數的類型。
  - 初始值可為整數，如 `dynamic weakVariable = 100;`。
  - 後續可改為字串，如 `weakVariable = "Dart Programming";`。

## 一切皆物件
- Dart 是物件導向程式語言，所有東西都是物件，包含 `null`。
  - `null` 也被視為物件，表示沒有值。
  - 範例：`dynamic weakVariable = null;`。

## 函數也是物件
- Dart 中，函數也是物件，屬於 `Function` 類別的子類型。
# String, Type Conversion, Constant, null
## 字串定義與使用
- 字串可以用單引號或雙引號定義，開始與結束的引號必須一致
- 當字串內有特殊字符如撇號時：
  - 使用單引號定義時，需用反斜線（`\`）來轉義，如：`'It\'s a book'`
  - 使用雙引號則不需要轉義：`"It's a book"`
- Raw 字串：如果不想讓特殊字符（如換行符）生效，可以在字串前加 `r`，例如：`r"Raw string"`

## 字串插值（String Interpolation）
- 在字串中插入變數的值，使用 `$` 符號，如：`"My age is $age"`

## 多行字串
- 使用三個單引號或三個雙引號來定義多行字串
- 範例：`'''This is a multi-line string'''` 或 `"""This is also a multi-line string"""`

## 資料類型轉換
- 字串轉整數：使用 `int.parse()` 方法，例如：`int one = int.parse('1');`
- 字串轉浮點數：使用 `double.parse()` 方法，例如：`double pi = double.parse('3.14');`
- 若字串中包含非數字字符，則會拋出 `FormatException`
- 整數轉字串：使用 `toString()` 方法，例如：`String str = 1.toString();`
- 浮點數轉字串：使用 `toStringAsFixed()` 來保留固定的小數位數，例如：`pi.toStringAsFixed(2)`

## 常數定義
- 使用 `const` 關鍵字定義常數，該變數在運行時不可更改
- 範例：`const int num = 0;`、`const bool isTrue = true;`、`const String name = "Dart"`

## 變數初始值與 `null`
- 若變數未被賦值，則其初始值為 `null`
- 範例：`int num;`，`print(num);` 會輸出 `null`
# Operators
## Dart 基本運算子

- 支援的運算子與功能
- 加法運算符：`+`
- 減法運算符：`-`
- 取餘運算符：`%`
- 相等檢查運算符：`==`
- 不相等檢查運算符：`!=`
- 大於等於運算符：`>=`
- 小於等於運算符：`<=`
- 簡寫運算子如 `*=`
- 支援一元運算子，包含增量運算 `++`

## Null 安全運算子

- Null 檢查方式：`n != null`
- 安全訪問屬性：`n?.num`
- 使用雙問號運算子 `??` 提供默認值
- 使用 `??=` 設定持久默認值

## 三元運算子

- 使用條件表達式簡化 if-else
- 語法：`condition ? trueValue : falseValue`

## 類型檢查運算子

- 使用 `is` 檢查變數類型
- 判斷類型並執行相應操作

## 條件控制

## if-else 語句

- 檢查條件並執行不同代碼塊
- 支援多個條件的檢查

## switch 語句

- 基於變數值執行不同代碼塊
- 提供清晰的條件選擇結構
# Loop
## Dart 迴圈概述

- 迴圈用於重複執行任務
- Dart 提供五種迴圈類型

## 標準 for 迴圈

- 語法類似於 JavaScript
- 包含初始化變數、條件檢查和增量部分
- 用於印出特定範圍的數字

## for-in 迴圈

- 專為遍歷陣列設計
- 簡潔的語法
- 依次訪問陣列中的每個元素

## forEach 迴圈

- 高階函數形式的迴圈
- 使用 `.forEach` 方法遍歷陣列
- 支援箭頭函數或普通函數作為參數

## while 迴圈

- 使用條件控制執行
- 在滿足條件時持續執行

## do-while 迴圈

- 先執行一次後檢查條件
- 確保至少執行一次迴圈內容

## break 語句

- 用於提前終止迴圈
- 可在任意類型的迴圈中使用

## continue 語句

- 跳過當前迴圈的剩餘部分
- 繼續下一次迴圈執行

## 使用範例

- 印出特定數字範圍的奇數或偶數
- 根據條件過濾輸出結果
# Collections [ List, Set, Map ]
## List
- 有序的值集合，類似於其他語言的陣列
- 使用 `List` 類別來定義
- 項目以索引存取，第一項索引為 0
- 使用 `length` 屬性獲取項目數量
- 支援靜態類型定義，透過 `<String>` 限制類型
- 可使用 `for-in` 迴圈遍歷
- 可變類型，允許修改項目
- 若需定義常量，使用 `const` 關鍵字
- 可以使用擴展運算符（`...`）克隆列表

## Set
- 無序且唯一的項目集合
- 使用大括號定義，例如 `{}` 
- 若重複添加項目，僅保留唯一項
- 空集合必須指定類型，使用 `<String>` 定義

## Map
- 鍵值對的集合，類似於其他語言的字典
- 鍵和值可以是任何類型
- 使用大括號或 `Map` 類別來定義
- 可以透過鍵來存取對應的值
- 支援動態添加鍵值對，使用 `gifts[key] = value` 方式

## 空集合及空映射的定義
- 空集合需明確指定類型，否則會被視為 `LinkedHashMap`
- 空映射可以使用 `Map` 類別來定義，並隨後添加鍵值對

## 定義及訪問範例
- 用於定義及操作各類集合的方法，包括如何存取及遍歷它們
# Function
## Dart中的函數概述

- 在Dart中，每個函數都是`Function`類別的物件。
- 定義函數時需指定返回類型，如果函數不返回任何值，可以使用`void`或省略該部分。
- 當使用`dynamic`作為返回類型時，函數可以返回任何類型的數值（整數或浮點數）。

## 定義平方函數

- 定義一個名為`square`的函數，接收一個`num`類型的參數。
- 函數的功能是將輸入值平方並返回結果。

## 顯示輸出函數

- 定義一個名為`showOutput`的函數，接收一個名為`message`的參數。
- 使用`print`函數將消息輸出到終端。

## 簡化函數定義

- Dart提供了使用箭頭函數（fat arrow）來簡化函數定義的方式。
- 使用`=>`符號來定義簡短的單行函數。

## 匿名函數

- 匿名函數是沒有名稱的函數，常用於回調。
- 可以使用`forEach`函數遍歷列表，傳入匿名函數作為參數。

## 參數類型

- Dart中有兩種類型的參數：位置參數（positional parameters）和命名參數（named parameters）。

## 位置參數

- 定義一個接受兩個位置參數的函數。
- 直接通過位置傳遞參數值。

## 命名參數

- 命名參數使用大括號包圍，並在調用時需要指定參數名稱。
- 命名參數預設為可選，且可以與位置參數混合使用。

## 可選參數的處理

- 位置參數可選性：使用方括號`[]`包圍參數。
- 使用`??`運算符為命名參數提供默認值。

## 預設值

- 可以在命名參數後面指定預設值。
- 如果未提供值，則使用預設值。

## 參數優先級

- 使用括號來確保運算的優先級，避免出現錯誤。
# Class
## 類別與物件導向

- 類別是自訂型別的藍圖。
- 可以將相關的值和方法封裝在一起。
- 支援繼承與多型性。

## 類別的定義

- 使用 `class` 關鍵字定義類別。
- 類別名稱後面跟隨大括號，裡面是類別的內容。
- 定義屬性如名稱和年齡。

## 方法的定義

- 類別中的函數稱為方法。
- 方法無需參數時可以直接定義。
- 方法可以使用 `this` 來訪問類別的屬性。

## 建立物件

- 使用類別名稱和圓括號來實例化物件。
- 物件變數可以用來存取方法和屬性。

## 建構子

- 建構子是特殊方法，無回傳型別。
- 使用類別名稱作為建構子的名稱。
- 可以定義預設建構子，並透過 `this` 關鍵字存取屬性。

## 命名建構子

- 除了預設建構子，可以定義命名建構子。
- 命名建構子可用於不同的初始化方式。

## 不可變的屬性

- 使用 `final` 關鍵字定義不可變屬性。
- `const` 關鍵字定義編譯時常數。
- `final` 可在執行時設定，但不可再變更。

## 繼承

- 使用 `extends` 關鍵字來繼承類別。
- 子類別可以擁有新的屬性和方法。
- 使用 `super` 關鍵字來調用父類別的方法和屬性。

## 方法覆寫

- 子類別可以重定義父類別的方法。
- 使用 `@override` 註解來標示覆寫的方法。

## 設定器與取值器

- 設定器和取值器是提供屬性的存取控制。
- 使用 `get` 和 `set` 關鍵字來定義。
- 可透過方法名稱直接存取取值器和設定器。
# Exception Handling
## 例外處理的概念
- 例外處理是程式語言中的一個特性，用於檢測運行時問題。
- Dart 使用 `throw`、`try`、`catch` 和 `finally` 關鍵字來進行例外處理。

## 函數範例
- 定義一個函數 `mustGreaterThan0`，如果傳入的值大於 0，則返回該值；否則，拋出例外。
- 使用 `throw` 關鍵字來拋出例外，並可附加訊息。

## 驗證函數
- 定義另一個函數 `verifyValue`，在其中使用 `try` 區塊調用 `mustGreaterThan0` 函數。
- 如果 `mustGreaterThan0` 拋出例外，則進入 `catch` 區塊處理該例外。

## 最終區塊
- `finally` 區塊是可選的，主要用來進行一些清理工作。
- 可以檢查 `valueVerification` 是否為 `null`，根據結果輸出相應訊息。

## 執行結果
- 第一種情況輸入值為 10，返回 "value verified: 10"。
- 第二種情況輸入值為 0，捕捉到例外並輸出錯誤訊息 "value must be greater than 0"，同時在 `finally` 區塊中輸出 "value is not accepted"。

## 捕捉特定例外
- 使用 `on` 關鍵字可以捕捉特定類型的例外。
- 通常情況下，建議使用 `try-catch` 結構，除非有特殊需求才使用 `on`。
# Terminology
- Dart SDK：Dart 語言的開發工具包，用來開發和執行 Dart 應用程式。
- Flutter Framework：使用 Dart 語言來開發跨平台行動應用程式的框架。
- Visual Studio Code：流行的跨平台程式碼編輯器，支援多種程式語言的開發。
- DartPad：線上編輯和執行 Dart 程式的工具，無需安裝 Dart SDK。
- Print 函數：在 Dart 中用來輸出訊息到控制台的內建函數。
- Main 函數：Dart 應用程式的進入點，程式從這裡開始執行。
- Extension：在編輯器中擴充功能的插件，用於增加支援特定語言或工具的功能。
- Terminal：執行指令或程式的命令列介面，可在 Visual Studio Code 中使用內建終端。
- Playground：用來測試和運行簡單程式碼的暫時性環境或檔案。
- Dart 2.3：Dart 語言的一個版本號，指出該版本的更新和功能。
- Cross-Platform：指能在多個作業系統上運行的應用程式或工具。
- SDK (Software Development Kit)：軟體開發工具包，包含工具和函式庫，用來開發應用程式。
- File Extension：檔案的副檔名，用來識別檔案類型，例如 Dart 檔案的副檔名為 .dart。
- Compile：將程式碼轉換為可執行的二進制檔或其他可執行格式的過程。
- Mac：蘋果公司設計的作業系統，通常指 macOS。
- Windows：微軟開發的作業系統。
- Linux：開源作業系統，常見於伺服器與開發環境。
- Syntax Highlighting：在編輯器中用不同顏色顯示程式碼的不同部分，方便閱讀和編輯。
- Demo Directory：用於展示或測試功能的資料夾。
- Command Line：一種使用文字指令來執行操作的介面。
- 靜態型別 (Static Type)：變數在宣告時明確指定其資料型別，後續無法賦予不同型別的值。
- 動態型別 (Dynamic Type)：允許變數儲存任何型別的值，型別在運行時確定。
- 型別推斷 (Type Inference)：Dart 編譯器自動根據賦值來推斷變數的型別。
- AOT 編譯 (Ahead Of Time Compilation)：在應用程式運行前完成編譯，適用於產品發佈。
- JIT 編譯 (Just In Time Compilation)：在運行時進行編譯，適用於開發過程中。
- Main 函數：Dart 程式的入口點，所有程式從此函數開始執行。
- Void 型別：表示函數沒有回傳值。
- 字串串接 (String Concatenation)：使用加號（+）來將多個字串合併為一個。
- 變數宣告 (Variable Declaration)：使用 `var` 或具體型別宣告變數並賦值。
- 標準輸出 (Standard Output)：使用 `stdout` 將訊息輸出到終端機。
- 標準輸入 (Standard Input)：使用 `stdin` 從終端機讀取使用者輸入。
- 字串內插 (String Interpolation)：在字串中使用 `$` 符號插入變數的值。
- 內建函式庫 (Built-in Libraries)：Dart 提供的核心函式庫，自動匯入無需手動引用。
- 匯入 (Import)：引入外部函式庫或套件供程式使用。
- Dart 核心函式庫 (Dart Core Library)：包含 Dart 基礎型別、集合、和其他核心功能，預設自動匯入。
- Dart IO 函式庫：用於處理輸入輸出操作的函式庫。
- 終端機輸入 (Terminal Input)：從終端機取得使用者的輸入，通常使用 `stdin.readLineSync()`。
- 終端機輸出 (Terminal Output)：將訊息顯示在終端機，通常使用 `stdout.writeln()`。
- 單行註解 (Single-line Comment)：使用 `//` 表示的單行註解。
- 區塊註解 (Block Comment)：使用 `/* */` 表示的多行註解。
- 強型別 (Strongly Typed)：變數的型別在編譯時期已知，不能隨意改變，常見於 C++、Java、Swift 等語言。
- 動態型別 (Dynamic Type)：變數的型別在運行時期確定，常見於 Python、Ruby、JavaScript 等語言。
- 基本型別 (Primitive Types)：Dart 提供的五種基本型別，包括 `int`、`double`、`String`、`bool`、`dynamic`。
- `int`：表示整數型別。
- `double`：表示浮點數型別，用來儲存小數。
- `String`：字串型別，用來儲存文字資料。
- `bool`：布林型別，值為 `true` 或 `false`。
- `dynamic`：動態型別，允許在運行期間改變變數的型別。
- 變數宣告 (Variable Declaration)：使用 `var` 或具體型別來宣告變數，並可依賦值進行型別推斷。
- 型別推斷 (Type Inference)：Dart 編譯器根據變數的初始賦值，自動推斷變數的型別。
- 布林值 (Boolean Value)：布林型別變數，儲存 `true` 或 `false`。
- 動態型別變數 (Dynamic Variable)：使用 `dynamic` 關鍵字宣告的變數，可儲存任意型別的值。
- Null 型別：表示變數沒有值，`null` 也是 Dart 中的一種物件。
- 型別錯誤 (Type Error)：當變數型別與賦值不匹配時，編譯器會產生型別錯誤。
- 物件 (Object)：Dart 中所有事物都是物件，包括基本型別和 `null`。
- 函數也是物件 (Functions as Objects)：Dart 中的函數也是物件，屬於 `Function` 類的子類別。
- 運行時期型別轉換 (Runtime Type Casting)：當變數是 `dynamic` 型別時，其型別可以在運行時期改變。
- 編譯時期型別檢查 (Compile-time Type Checking)：Dart 編譯器在編譯時期會檢查變數型別是否匹配。
- 資料型別安全 (Type Safety)：Dart 確保變數在使用過程中遵守型別的規則，避免型別錯誤。
- 字串內插 (String Interpolation)：使用 `$` 來在字串中插入變數的值。
- 類別 (Class)：Dart 是物件導向的，所有變數和函數都繼承自類別。
- 單引號與雙引號字串：在 Dart 中，可以使用單引號或雙引號來定義字串，並且必須使用相同的引號結束字串。
- 轉義字符 (Escape Character)：使用反斜線 `\` 來轉義特殊字符，例如在字串中插入單引號。
- 原始字串 (Raw String)：透過在字串前加 `r`，可以定義一個不會處理特殊字符的字串。
- 字串插值 (String Interpolation)：使用 `$` 符號在字串中插入變數的值。
- 多行字串 (Multiline String)：可以使用三個單引號或三個雙引號來定義多行字串。
- 型別轉換 (Type Conversion)：使用 `int.parse()` 將字串轉換為整數，或使用 `double.parse()` 將字串轉換為浮點數。
- 例外處理 (Exception Handling)：當字串無法轉換為數字時，會拋出 `FormatException`。
- 整數轉字串 (Integer to String)：使用 `.toString()` 方法將整數轉換為字串。
- 浮點數格式化 (Floating Point Formatting)：使用 `toStringAsFixed(2)` 將浮點數格式化為固定小數位數的字串。
- 常數 (Constants)：使用 `const` 關鍵字定義常數變數，這些變數的值在運行時無法更改。
- 類型檢查 (Type Checking)：可以使用 `.runtimeType` 方法來檢查變數在運行時的類型。
- 空值 (Null Value)：未賦值的變數默認為 `null`，Dart 中 `null` 也是一種物件。
- 常數類型推斷 (Constant Type Inference)：Dart 編譯器會根據賦值內容自動推斷常數的類型。
- 字串格式檢查 (String Formatting Check)：可以使用斷言來檢查字串格式是否符合期望。
- 變數未初始化 (Uninitialized Variable)：未初始化的變數在 Dart 中會自動賦予 `null` 值。
- 動態賦值 (Dynamic Assignment)：`dynamic` 型別變數可以在運行時期接受不同的資料型別賦值。
- 函數也是物件 (Function as Object)：Dart 中的函數也是物件，屬於 `Function` 類別的實例。
- 編譯時期型別安全 (Compile-time Type Safety)：Dart 編譯器在編譯時檢查變數型別以避免型別錯誤。
- 數值解析 (Number Parsing)：使用內建的數字解析方法來將字串轉換為整數或浮點數。
- 類型斷言 (Type Assertion)：使用內建的 `assert()` 方法來驗證數據類型是否正確。
- **運算符 (Operator)**：用於執行運算的符號，如加法、減法、乘法等。
- **變數 (Variable)**：儲存資料的命名儲存空間，能在程式中變更其值。
- **條件語句 (Conditional Statement)**：根據條件的真假執行不同程式碼的語句，如 `if` 和 `else`。
- **函數 (Function)**：一組可重複執行的程式碼，用於執行特定任務。
- **類別 (Class)**：定義物件的藍圖，包含屬性和方法。
- **物件 (Object)**：類別的實例，封裝了數據和行為。
- **屬性 (Property)**：物件的特徵或狀態，通常以變數形式存在。
- **方法 (Method)**：物件的函數，用於操作物件的屬性。
- **例外處理 (Exception Handling)**：捕捉並處理程式執行過程中的錯誤。
- **邏輯運算符 (Logical Operator)**：用於連接多個條件的運算符，如 AND、OR。
- **空值運算符 (Null Operator)**：用於處理空值情況的運算符，如 `?.` 和 `??`。
- **三元運算符 (Ternary Operator)**：基於條件表達式的簡化寫法，通常為 `condition ? trueExpression : falseExpression`。
- **類型檢查運算符 (Type Test Operator)**：檢查變數的數據類型，通常為 `is`。
- **切換語句 (Switch Statement)**：基於變數的值執行不同程式碼塊的語句。
- **迴圈 (Loop)**：重複執行一段程式碼的結構，如 `for` 或 `while`。
- **自增運算符 (Increment Operator)**：增加變數值的運算符，如 `++`。
- **自減運算符 (Decrement Operator)**：減少變數值的運算符，如 `--`。
- **靜態類型 (Static Typing)**：在編譯時檢查變數類型的特性，與動態類型相對。
- **JSON (JavaScript Object Notation)**：用於存儲和傳輸資料的輕量級資料格式。
- **API (Application Programming Interface)**：一組定義了不同軟體元件之間互動的協定。
- **記憶體管理 (Memory Management)**：分配和回收記憶體的過程，以避免記憶體泄漏。
- **循環 (Loop)**：重複執行一段程式碼的結構，根據特定條件決定執行的次數。
- **標準 for 循環 (Standard For Loop)**：一種循環結構，通常包含初始化、條件和增量部分，用於執行固定次數的操作。
- **for in 循環 (For In Loop)**：遍歷集合或陣列的簡化語法，直接取出每個元素的值。
- **for each 循環 (For Each Loop)**：一種高階函數，針對集合中的每個元素執行指定的函數。
- **箭頭函數 (Arrow Function)**：簡化的函數語法，用於表達單行函數，常用於回呼函數。
- **while 循環 (While Loop)**：基於條件持續執行的循環，直到條件不再成立。
- **do-while 循環 (Do-While Loop)**：先執行循環體，再檢查條件的循環，至少執行一次。
- **中斷語句 (Break Statement)**：用於立即終止循環的語句，無論條件是否滿足。
- **繼續語句 (Continue Statement)**：用於跳過當前迴圈的剩餘語句，直接進入下一次迴圈的條件檢查。
- **條件 (Condition)**：在循環中決定是否繼續執行的表達式，通常為布林值。
- **初始值 (Initialization)**：在循環開始時設置的變數值，通常在標準 for 循環中使用。
- **增量 (Increment)**：在每次循環後增加變數值的步驟，通常用於控制循環次數。
- **陣列 (Array)**：一種資料結構，用於儲存多個相同類型的值，按索引存取。
- **長度 (Length)**：陣列或集合中元素的數量，通常用於判斷循環次數。
- **回呼函數 (Callback Function)**：作為參數傳遞給其他函數的函數，通常用於異步操作或事件處理。
- **條件運算符 (Conditional Operator)**：簡化的條件表達式，用於根據布林值返回不同的結果。
- **數據類型 (Data Type)**：定義變數可以儲存的資料類型，如整數、浮點數或字串等。
- **範圍 (Scope)**：變數的可見性和生命週期，通常分為全域和區域範圍。
- **參數 (Parameter)**：傳遞給函數的輸入值，作為函數執行的依據。
- **輸出 (Output)**：程式執行後顯示的結果，通常使用 `print` 函數來顯示。
- **集合 (Collection)**：在 Dart 中的數據結構，用來儲存多個值，包括 List、Set 和 Map。
- **列表 (List)**：有序的集合，可以儲存多個值，通過索引訪問，類似於陣列。
- **索引 (Index)**：列表中元素的位置，從 0 開始計數。
- **長度 (Length)**：列表中元素的數量，可以使用 `length` 屬性獲取。
- **靜態類型 (Static Typing)**：變數在編譯時已被指定類型，編譯器會檢查類型匹配。
- **可變性 (Mutability)**：指集合是否可以在運行時修改其內容，列表在 Dart 中是可變的。
- **常量 (Constant)**：在運行時不能更改的值，通過 `const` 關鍵字來定義。
- **複製 (Cloning)**：創建一個集合的獨立副本，避免兩個變數指向同一個集合。
- **展開運算符 (Spread Operator)**：用於將一個集合的所有元素插入到另一個集合中，表示為 `...`。
- **集合 (Set)**：無序的唯一項集合，每個元素只能出現一次。
- **哈希集合 (Hash Set)**：使用哈希表實現的集合，提供高效的查找和插入操作。
- **映射 (Map)**：鍵值對集合，每個鍵唯一，可以通過鍵訪問相應的值。
- **字典 (Dictionary)**：在某些編程語言中對映射的稱呼，Dart 中的 Map 類似於字典。
- **鍵 (Key)**：映射中用於唯一標識值的項，類似於索引。
- **值 (Value)**：映射中與鍵相關聯的數據，通過鍵訪問。
- **空集合 (Empty Set)**：未包含任何元素的集合，必須使用類型定義來創建。
- **空映射 (Empty Map)**：未包含任何鍵值對的映射，可以通過 Map 類創建。
- **高階函數 (Higher-Order Function)**：接受函數作為參數或返回函數的函數，用於簡化代碼。
- **箭頭函數 (Arrow Function)**：簡化的函數語法，通常用於一行的回呼函數。
- **函數引用 (Function Reference)**：將函數本身作為參數傳遞，而不是函數的返回值。
- **類型推斷 (Type Inference)**：編譯器自動識別變數的類型，減少顯式聲明的需要。
- **函數 (Function)**：可重用的代碼塊，可以接受參數並返回值，是 Dart 中的基本建構塊。
- **返回類型 (Return Type)**：函數返回的數據類型，如 `void`、`int` 或 `dynamic`，決定函數的返回值格式。
- **參數 (Parameter)**：函數接受的輸入值，定義在函數聲明中，可以是位置參數或命名參數。
- **動態類型 (Dynamic Type)**：表示可以在運行時改變類型的值，使用 `dynamic` 關鍵字定義。
- **匿名函數 (Anonymous Function)**：不具名的函數，通常用於一次性執行或作為參數傳遞的函數。
- **高階函數 (Higher-Order Function)**：接受函數作為參數或返回函數的函數，常用於操作集合或回呼。
- **箭頭函數 (Arrow Function)**：簡化函數語法，用 `=>` 定義，通常用於簡單的表達式。
- **位置參數 (Positional Parameter)**：根據位置傳遞的參數，函數調用時必須按照定義的順序提供。
- **命名參數 (Named Parameter)**：在函數調用時通過名稱指定的參數，可以選擇性提供。
- **默認值 (Default Value)**：如果未提供參數值時，使用的預設值，定義在參數聲明中。
- **空安全 (Null Safety)**：防止因使用空值而導致錯誤的機制，使用 `?` 和 `??` 來處理可能的空值。
- **條件運算符 (Conditional Operator)**：簡化的條件判斷表達式，使用 `?` 和 `:` 來選擇性返回值。
- **函數引用 (Function Reference)**：將函數本身作為變數或參數傳遞，不執行函數，而是傳遞其引用。
- **函數體 (Function Body)**：函數內部的執行代碼，包含函數執行的具體操作。
- **回呼函數 (Callback Function)**：作為參數傳遞並在特定情況下被調用的函數，常用於事件處理。
- **可選參數 (Optional Parameter)**：在函數中不必提供的參數，通過命名參數或位置參數的括號來定義。
- **類型推斷 (Type Inference)**：編譯器自動推斷變數類型，減少開發者的明確聲明。
- **邏輯運算符 (Logical Operator)**：用於在條件語句中進行邏輯運算，如 `&&`（與）和 `||`（或）。
- **遍歷 (Iteration)**：通過循環結構訪問集合中的每個元素，常用於 List 和 Set。
- **列表 (List)**：在 Dart 中用於儲存有序的元素集合，支持重複元素。
- **類別（Class）**：一種用來定義自訂型別的結構，包含屬性和方法的藍圖。
- **物件（Object）**：根據類別所創建的實例，擁有類別定義的屬性和方法。
- **封裝（Encapsulation）**：將相關的數據和方法封裝在一個類別中，以保護內部狀態不被外部隨意訪問。
- **繼承（Inheritance）**：一種機制，使得子類可以繼承父類的屬性和方法，促進代碼重用。
- **多態（Polymorphism）**：同一方法可以用於不同類型的對象，根據對象的實際類型執行相應的方法。
- **構造函數（Constructor）**：在創建物件時自動調用的方法，用於初始化物件的屬性。
- **默認構造函數（Default Constructor）**：不帶參數的構造函數，當未提供任何參數時調用。
- **命名構造函數（Named Constructor）**：具名的構造函數，允許以不同的方式初始化物件。
- **靜態變量（Static Variable）**：屬於類別而不是實例的變量，所有實例共享同一靜態變量。
- **最終變量（Final Variable）**：在初始化後不能更改的變量，只能賦值一次。
- **常量變量（Const Variable）**：編譯時常量，在運行時無法更改，必須在編譯時已知其值。
- **方法覆寫（Method Overriding）**：在子類中重新定義從父類繼承的方法，以實現特定的行為。
- **獲取器（Getter）**：用於訪問物件屬性的特殊方法，通常以`get`關鍵字定義。
- **設置器（Setter）**：用於修改物件屬性的特殊方法，通常以`set`關鍵字定義。
- **靜態方法（Static Method）**：屬於類別的方法，可以在不創建類別實例的情況下直接調用。
- **超類（Super Class）**：被繼承的類別，也稱為父類。
- **子類（Sub Class）**：繼承自其他類別的類別，也稱為派生類。
- **錯誤處理（Error Handling）**：處理運行時可能發生的錯誤的過程，以增強代碼的穩定性。
- **對象屬性（Object Property）**：物件中定義的屬性，每個物件可以擁有不同的屬性值。
- **類屬性（Class Property）**：靜態屬性，屬於整個類別，所有實例共享。
- **訪問修飾符（Access Modifier）**：控制對類別成員（屬性和方法）訪問權限的關鍵字，如`public`、`private`、`protected`。
- **例外處理 (Exception Handling)**：程式語言中的功能，用於處理在執行時期發生的錯誤或異常情況，以避免程序崩潰。
- **拋出 (Throw)**：用於主動引發一個例外，通常用在函數中當遇到不正確的輸入或狀態時。
- **捕獲 (Catch)**：用來接收並處理由拋出語句引發的例外，防止程序中斷。
- **最終 (Finally)**：一個可選的區塊，無論是否發生例外，該區塊中的程式碼都會執行，通常用於資源釋放。
- **嘗試 (Try)**：包含可能會引發例外的程式碼區塊，必須與捕獲區塊配合使用。
- **例外類別 (Exception Class)**：定義例外的類型，提供詳細的錯誤信息，通常包含錯誤消息。
- **值驗證 (Value Verification)**：在函數中檢查輸入值是否合法的過程，通常涉及邏輯判斷。
- **插值 (Interpolation)**：將變數的值嵌入到字符串中，常用於錯誤消息的格式化。
- **空值 (Null)**：在程式中表示一個無效或不存在的值，通常用於指示未賦值或操作失敗。
- **運算符 (Operator)**：執行特定操作的符號，例如加法、減法或比較等。
- **條件判斷 (Conditional Statement)**：根據條件執行不同代碼塊的語句，如`if`語句。
- **錯誤類型 (Error Type)**：描述例外的具體類型，用於區分不同的錯誤情況。
- **局部變數 (Local Variable)**：在函數內部定義的變數，僅在該函數的作用域內可用。
- **全局變數 (Global Variable)**：在全局作用域內定義的變數，可以在程序的任何部分訪問。
- **執行 (Execution)**：程式碼的運行過程，涉及函數調用和控制流的管理。
- **錯誤處理 (Error Handling)**：對程式中出現的錯誤進行檢測、捕獲和響應的過程。
- **堆疊跟蹤 (Stack Trace)**：顯示程序執行路徑的報告，有助於調試和定位錯誤源。
- **自定義例外 (Custom Exception)**：使用者自定義的例外類型，用於提供更具體的錯誤信息。
- **異常傳遞 (Exception Propagation)**：例外發生後，程序向上傳遞例外的過程，直到找到相應的捕獲處理。
- **控制流 (Control Flow)**：決定程式碼執行順序的結構，包括條件判斷和循環。
- **錯誤檢測 (Error Detection)**：識別和報告程式中出現的錯誤或異常狀況的過程。