
程式中的選擇 (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 |
沒有留言:
張貼留言
0.留言請選擇註冊帳號, Google 或 OpenID 均可
1.歡迎留言交流,但不歡迎垃圾留言及廣告留言
2.文章相關問題歡迎提出,請減少情緒性留言
3.非文章相關內容,請到 G+ 社群或 FB 社團提出
4.問作業之留言會被直接刪除
5.莫忘網路禮節
6.可使用部份HTML標記,如 <b> 、 <i> 、 <a>
7.站長保留刪除留言的權力