在上一課範例1-4b 列印商王年表時,我們注意到西元-1558年應該表達為「西元前1558年」較合乎習慣,這需要一個 if 指令去判斷年份,如果年份 n小於0,就印出「西元前xxxx年」,如果 n大於0,就印出「西元xxxx年」。用Swift的寫法如下:

if n < 0 {
    print("西元前\\(abs(n))年")
} else {
    print("西元\\(n)年")
}

這整個句子稱為「if-else 條件句」或簡稱「if 條件句」,一般的 if 條件句,else 後半段如果不需要是可以省略的,不過在這裏是需要的。

還記得字串裡面倒斜線 \() 的特殊用法嗎?這種用法非常重要,如果忘記,請參考第2課資料類型(Data Type) 內容。

另外,如果 n小於0,需要取 n的絕對值,可呼叫另外一個函式 abs(n),傳回 n的絕對值,abs() 即 "absolute"(絕對值)的簡寫。

if 後面的 "n < 0" 稱為「邏輯運算式」,和之前的算術運算式類似,也會得到一個結果值,算術運算式的結果可能是整數或實數,而邏輯運算式的結果只有兩個值:真(true)或假(false),true, false 這兩個值(注意沒有引號 " ")組成一個新的資料類型,稱為 Bool (布爾或布林)類型。

如果 if 後面的邏輯運算式結果為 true,則執行緊接的 { } 段落,否則為 false 就執行 else 之後的 { } 段落。

這裡還有一個很方便也很常用的特殊用法:

if n < 0 {
    print("西元前\\(abs(n))年")
} else {
    print("西元\\(n)年")
}

可以寫成

print(n < 0 ? "西元前\\(abs(n))年" : "西元\\(n)年")

注意其中

n < 0 ? "西元前\\(abs(n))年" : "西元\\(n)年"

這是一個用問號 ? 與冒號 : 組成的混合運算式,如果 n < 0 則取前面 "西元前\(abs(n))年" 字串,否則取冒號後面 "西元\(n)年" 字串,這種用法可以取代簡單的 if條件句。