Swift 入門指南 V1.00 - 單元 5 - 選擇




程式中的選擇 (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) 執行。


ifelse 連用,條件為真,就會執行 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 。同樣的 switchcase 也都是關鍵字


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 最下面有個 defaultdefault 就是預設情況,如果以上皆非就會執行 default 的地方,這跟 if-else if-else 最後的 else 的用法相同,每個 switch-case 都要有 default 的部分。


switch 中只要找到符合的 case 就會執行該 case 底下縮排的程式碼,然後跳出整個 switch 的大括弧,如果要找到 case 後繼續執行底下其他的 casedefault ,就要加上關鍵字 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

沒有留言: