歡迎來到編碼的世界!
在本章中,我們將一起探索編程概念。你可以把這些概念想像成每個電腦程式的「積木」。無論是一個簡單的計算機,還是一個大型的電子遊戲,它們運作的基本原理都是一樣的。如果一開始覺得像學習一門新語言而感到困惑,請別擔心——當你讀完這一章後,你會發現編碼其實就是一種給予清晰指令的方法!
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 - 條件控制)
當我們不知道需要重複多少次時,就會用到這種迭代。我們會持續執行,直到滿足 WHILE 或 UNTIL 的條件為止。
• 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):只留在子程式內。
你做得很好! 編程的核心在於邏輯。如果你能向朋友一步步解釋如何泡一杯茶,那你其實已經理解了編程概念的基礎了!