程式中的選擇 (selection) 就是依條件 (condition) 使程式有不同的執行方向,若條件為真,也就是 true ,程式就會跳過 false 的部份執行 true 的部份,反之亦然
選擇結構有單一選擇跟多重選擇,兩者都可使用 if 陳述 (if statement) , if 為關鍵字 (keyword) 之一,若是多重選擇 if 須與 else 連用。單一選擇,也就是單獨使用 if 陳述,如下
if 3 > 5 { |
println("3大於5發生了!"); |
} |
以上條件為 3 大於 5 ,如果 3 大於 5 為真,程式就會執行條件後的大括弧的程式區塊 (block) ,如果 3 大於 5 為假,程式就會跳過條件後的程式區塊,去找程式區塊後的第一個陳述 (statement) 執行。
if 與 else 連用,條件為真,就會執行 if 後的程式區塊,反之條件為假,就會執行 else 後的程式區塊
if 3 > 5 { |
println("3大於5發生了!"); |
} |
else { |
println("3沒有大於5!"); |
} |
if-else 也可以多個連用,形成 if-else if-else 的多重選擇,最後的 else 表示以上皆非
if 3 > 5 { |
println("3大於5發生了!"); |
} |
else if 4 > 5 { |
println("4大於5發生了!"); |
} |
else if 5 > 5 { |
println("5大於5發生了!"); |
} |
else if 6 > 5 { |
println("6當然大於5哩!"); |
} |
else { |
println("沒有符合的條件"); |
} |
我們將以上輸入 Playground ,結果如下
這裡也可以看到 Playground 提示哪些陳述永遠不會被執行。
if-else if-else 的缺點是需要很多個條件,程式需要做多次條件判斷,因此另外有個 switch 陳述 (switch statement) ,條件為常數 (constant) 值,這會依序尋找符合的 case 。同樣的 switch 、 case 也都是關鍵字
switch 6 { |
case 3: |
println("選擇是3..."); |
case 4: |
println("選擇是4..."); |
case 5: |
println("選擇是5..."); |
case 6: |
println("選擇是6..."); |
default: |
println("沒有符合的"); |
} |
這裡, switch 後面的小括弧必須是常數值,此例中直接使用字面常數 (literal) ,也可以使用有常數值的變數 (variable) 。 case 後空一格,然後也是接常數值,通常就是直接填入符合情況的字面常數,注意,每個 case 的常數後都要接冒號。
case 底下的陳述,習慣上沒有用大括弧,而是用縮排 (indentation) 的方式表示屬於哪個 case 。整個 switch-case 最下面有個 default , default 就是預設情況,如果以上皆非就會執行 default 的地方,這跟 if-else if-else 最後的 else 的用法相同,每個 switch-case 都要有 default 的部分。
switch 中只要找到符合的 case 就會執行該 case 底下縮排的程式碼,然後跳出整個 switch 的大括弧,如果要找到 case 後繼續執行底下其他的 case 及 default ,就要加上關鍵字 fallthrough 。
我們將此例輸入 Playground ,如下
如果多個常數值執行相同的程式碼,這些常數值可以放在同一個 case ,每個常數用逗號區隔,例如
switch "a" { |
case "v", "c", "f": |
println("v c f") |
case "a", "b": |
println("a b") |
default: |
println("No matches!") |
} |
此例輸入 Playground ,如下
如果常數是連續的數字或按 Unicode 順序排列的連續字元,可以用範圍運算子 (range operator) ... ,例如
switch 65 { |
case 0...59: |
println("Not Good!") |
case 60...69: |
println("Good!") |
case 70...79: |
println("Great!") |
default: |
println("No matches!") |
} |
此例輸入 Playground ,如下
關鍵字 where 可用來增加額外的條件控制。
switch 的條件也可以用序對 (tuple) ,但無法適用在 if 中。
複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!
中英文術語對照
選擇 | selection |
條件 | condition |
if 陳述 | if statement |
關鍵字 | keyword |
區塊 | block |
陳述 | statement |
switch 陳述 | switch statement |
常數 | constant |
字面常數 | literal |
變數 | variable |
縮排 | indentation |
範圍運算子 | range operator |
序對 | tuple |
複合陳述 | compound statement |
選擇結構 | selection structure |
重複結構 | repetition structure |
迴圈 | loop |
沒有留言:
張貼留言