JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

迴圈與條件:重複和判斷

兩個小小的概念,給你的程式裝上了大腦和心跳——決定該做什麼,以及一遍又一遍地去做——幾乎其他所有東西都建立在它們之上。

做決定:如果這樣,就那樣

到目前為止,程式可能感覺像一份食譜,永遠按同樣的順序做完全一樣的步驟。但現實生活不是這樣——如果下雨你就帶傘,否則就把傘留在家裡。條件(conditional)就是你給程式裝上這種常識的方式:它看看某件事是不是真的,然後挑一條路走。

在程式碼裡,這幾乎總是用 if(如果)和 else(否則)這兩個詞。你寫下 `if`,後面跟一個只能回答「是」或「否」的問題——比如「分數高於 60 嗎?」——再寫上答案為「是」時要做的那段事。`else` 部分是可選的:它是墊底,也就是答案為「否」時該做什麼。

if (score >= 60) {
  print("You passed!")
} else {
  print("Try again.")
}
如果分數大於等於 60,就說「通過了」;否則說「再試一次」。只會有一條分支被執行。

重複:再做一次,再做一次

電腦最擅長的就是毫無怨言地做枯燥的事。假設你要給 500 個人寄同一封郵件,你絕不會手動複製貼上 500 次——你也不需要。迴圈(loop)就是那個會說「把這個動作一遍又一遍地做」的工具,於是你只寫一次步驟,電腦就替你重複。

迴圈有兩種日常的口味。第一種是每一項重複一次——「清單上的每個名字,都寄一封郵件」。第二種是重複到某個條件讓它停——「只要收到的密碼是錯的,就一直要求重新輸入」。兩者共享同一種心跳節奏:做事、檢查要不要再來一次、做事、再檢查。

逐項走過一份清單

大多數時候你之所以要迴圈,是因為你手上有一堆東西要處理。在程式碼裡,這樣一組有順序的東西叫陣列(array)——把它想像成一排帶編號的盒子,每個盒子裡裝著一個值。你最常寫的迴圈,就是從第一個盒子走到最後一個盒子,在每一站做一件小事。

fruits = ["apple", "pear", "plum"]

for fruit in fruits {
  print("I have a " + fruit)
}
清單裡的每個水果,都印出一行。迴圈跑三次——每項一次——然後自動停下。

把那行 `for ... in ...` 大聲讀成「對 fruits 裡的每個 fruit」。`fruit` 這個詞是一個臨時標籤,每轉一圈就指向其中一項——先是「apple」,然後「pear」,再然後「plum」。你只寫一次迴圈體,迴圈每一圈都貼心地替你換上下一項。這就是全部的訣竅,而你會不停地用到它。

新手最常踩的坑

有兩個錯誤幾乎人人在早期都會撞上,所以現在認出它們,能省下你以後好幾個小時。第一個是差一(off-by-one)錯誤。它通常在你自己數位置、而不用 `for each` 時發作,因為在大多數語言裡,陣列的第一個盒子編號是 0,不是 1——所以一份 3 項的清單,位置是 0、1、2。去拿位置 3 會什麼都拿不到,或者直接當掉。

第二個坑是無窮迴圈(infinite loop):一個永遠停不下來的重複,因為你讓它等的那個條件永遠不會變成真。想像你對朋友說「一直走到你看見紅色的門為止」,可根本沒有紅色的門——他就會永遠走下去。在程式碼裡,迴圈就一直空轉,程式卡死,你的風扇開始狂轉。

小結

你剛剛認識了兩個概念,它們能把一串平鋪直敘的指令,變成會思考、會行動的東西。條件負責決定——它問一個「是/否」問題,然後挑一條路。迴圈負責重複——每項一次,或者直到某個條件叫停。

你最常寫的套路,就是把這兩者合在一起:走過一個陣列,並在迴圈內部用一個 `if` 來決定怎麼處理每一項。留心「差一」和「無窮迴圈」這兩個坑,永遠先問「是什麼讓它停?」,你手裡就已經握住了相當可觀的一大塊程式設計能力。