歡迎來到編碼的世界!

在本章中,我們將一起探索編程概念。你可以把這些概念想像成每個電腦程式的「積木」。無論是一個簡單的計算機,還是一個大型的電子遊戲,它們運作的基本原理都是一樣的。如果一開始覺得像學習一門新語言而感到困惑,請別擔心——當你讀完這一章後,你會發現編碼其實就是一種給予清晰指令的方法!

1. 編程的三大黃金法則

你編寫的每一個程式都是由三個核心思想構建而成的。這些是讓程式碼順暢運作的「組合原則」:

順序 (Sequence):這是最簡單的一種。它意味著電腦會按照你的指令,從上到下依次執行。就像依照食譜做菜一樣!
選擇 (Selection):這是電腦做出決策的方式。它使用「if」語句來決定執行哪一條路徑。(例如:如果正在下雨,就帶上一把雨傘。
迭代 (Iteration):這是「迴圈 (looping)」的專業術語。當電腦需要重複執行一組指令時,就會用到它。

快速重溫:三大支柱

順序 (Sequence) = 順序/次序
選擇 (Selection) = 決策
迭代 (Iteration) = 重複

2. 儲存數據:變數與常數

要讓程式執行任何有用的任務,它必須能夠「記住」資訊。我們透過識別碼 (Identifiers)(我們為數據片段所取的名稱)來達成這一點。

變數宣告 (Variable Declaration)

變數 (Variable) 就像是一個貼了標籤的收納盒。當程式運行時,你可以隨時更改盒內的內容。例如,在遊戲中,你的「分數 (score)」就是一個變數,因為每當你得到一分,分數就會改變。

常數宣告 (Constant Declaration)

常數 (Constant) 是一個一旦程式開始運行就無法更改的值。
為什麼要使用它們? 這會讓你的程式碼更安全!如果你有一個像 \( \pi = 3.14 \) 這樣的值,你肯定不希望程式碼中的錯誤意外地把它改成 5.0。此外,這也能提高程式碼的可讀性。

賦值 (Assignment)

賦值 (Assignment) 是將值放入變數的過程。在 AQA 偽代碼中,我們使用箭頭來表示:Score ← 10。這意味著「將數字 10 放入名為 Score 的變數中」。

你知道嗎? 使用有意義的識別碼名稱(例如用 player_lives 而不是簡單的 x)至關重要。這能幫助其他程式設計師(以及未來的你自己!)更輕鬆地理解程式碼的用途。

重點總結: 變數用於會改變的數據,常數用於不變的數據。務必為它們命名清晰且具描述性的名稱!

3. 選擇(做出決策)

電腦本身並不「聰明」,它們只是遵循我們透過選擇 (Selection) 所給予的邏輯。

最常見的形式是 IF 語句。我們還可以對它們進行「巢狀」處理。巢狀選擇 (Nested Selection) 是指在一個 IF 語句中嵌套另一個 IF 語句。這就像一個決策樹。

範例:
IF GameWon = True THEN
    IF Score > HighScore THEN
        ... 更新最高分 ...
    ENDIF
ENDIF

如果這看起來有點複雜,別擔心! 只要把它想成「第一層」(我贏了嗎?)和「第二層」(我的分數是最高的嗎?)。只有當第一層成立時,你才會去檢查第二層。

4. 迭代(迴圈)

迭代就是重複執行程式碼。你需要掌握兩種類型:

確定性迭代 (Definite Iteration - 計數控制)

當我們確切知道需要重複多少次時,就會用到這種迭代。我們通常使用 FOR 迴圈。
範例:FOR i ← 1 TO 5(這將會執行剛好 5 次)。

不確定性迭代 (Indefinite Iteration - 條件控制)

當我們不知道需要重複多少次時,就會用到這種迭代。我們會持續執行,直到滿足 WHILEUNTIL 的條件為止。

WHILE 迴圈:在開始時檢查條件。如果條件不滿足,內部的程式碼可能永遠不會執行!
REPEAT UNTIL 迴圈:在結束時檢查條件。這意味著內部的程式碼一定會至少執行一次

記憶小撇步:
FOR = 我們知道次數。
WHILE/REPEAT = 我們在等待某事發生。

重點總結: 當你需要多次重複整個過程時(例如逐行繪製一個方格網格),請使用巢狀迭代 (Nested Iteration)(迴圈中的迴圈)。

5. 子程式(程序與函數)

子程式 (Subroutine) 是一個執行特定任務的命名程式碼區塊。與其重複編寫相同的 20 行程式碼,不如將其編寫成一個子程式,並在需要時透過名稱來「呼叫 (call)」它。

子程式的兩種類型:

1. 程序 (Procedures):執行任務但不會回傳任何值。
2. 函數 (Functions):執行任務並向主程式回傳 (RETURN) 一個值。

參數與區域變數

參數 (Parameters):這是你傳入子程式的「輸入」,讓它擁有執行任務所需的數據。
區域變數 (Local Variables):這些是在子程式內部宣告的變數。它們只在該子程式執行時存在。這是一種「好的編程習慣」,因為它能防止程式的不同部分意外地干擾彼此的數據!

類比: 想像一個「製作多士 (MakeToast)」的子程式。參數就是你放進去的麵包。函數會回傳烤好的多士給你。留在多士爐裡的任何麵包屑就像是區域變數——它們只留在多士爐內,不會影響你廚房的其他部分!

6. 結構化程式設計

這是一種專業的編碼方法。它意味著將一個巨大且困難的問題拆解成較小、易於管理的子程式(這稱為分解 (Decomposition))。

結構化方法的優點:
• 編寫和測試小片段的程式碼更容易。
• 你可以在程式的不同部分重複使用子程式。
• 對人類來說,程式碼更容易閱讀和修復(除錯)。

快速重溫箱:
子程式 (Subroutine):主程式中的迷你程式。
函數 (Function):會回傳值 (Returns)。
程序 (Procedure):僅執行工作。
區域變數 (Local Variable):只留在子程式內。

你做得很好! 編程的核心在於邏輯。如果你能向朋友一步步解釋如何泡一杯茶,那你其實已經理解了編程概念的基礎了!