條件運算會分成三個部分,在我目前學到的Swift語言中,我認為有三種條件運算必須要整合成一個單元來複習:
簡言上述三種條件運算的邏輯:
if…else比較屬於是直線式邏輯,一個東西進來之後,一直經過層層過濾,最後才認為它被歸屬為哪個條件之下的產物。
guard…else 則如其名,像個守衛,如果你符合它守護的原則,那麼你所提的條件就會被它接納,否,則被踢除,端看else後的條件是什麼,產出產物。
Switch case有趣些,它比較像是平行所有的條件,然後你符合Switch語法裡的哪一個case,就走那向case給出的條件過濾,然後產出那個條件下的產物。
最常見的就是if...else的運算,或者也可以直白的以中文來說,就是:「如果...就...」
if…else語法應該是最基礎的條件運算語法了,幾乎每個程式語言都有,我之前寫過的Python也有這種運算的語法,只不過如果要詳細一點說,Swift的if條件運算語法有三個小分類:
if A{
return B
}
如果A條件成立,就執行B
if A{
//implement B
}else{
//implement C
}
如果A條件成立,就執行B,若否,就執行C
這種運算的想法跟guard…else很像,只要條件一沒有成立,就是走向另一個結果。
if A1{
//implement B
}else if A2{
//implement C
}else if A#{
//implement D
}
這種邏輯則偏向多條件式的運算,且通常具有順序性,假若條件A1失敗,那就走向條件A2,依此類推,符合其條件的就執行其中的內容。
不過由於它是層層的過濾條件,因此在速度上會比Switch case慢些。
條件運算這件事情,除了基本型的if…else,還有一種,叫做guard…else,誠如上一篇簡短的描述:
guard…else 如其名,像個守衛,如果你符合它守護的原則,那麼你所提的條件就會被它接納,否,則被踢除,端看else後的條件是什麼,產出產物。
guard的邏輯是某條件為真,不然就是某條件為假,產出兩種結果。
if…else則是可以包含多重條件的前提,然後進行篩選,和guard比較的話,會有一種感覺是:guard比較單純,就是符合條件或不符合條件兩者。
總之,guard在操作上有點像個守衛,你是好人,就讓你進來,你是壞人,就掰掰。
func passwordCheck(code:String){
guard code == "password" else{
print("shit,not right,Bro!")
return
}
print("Ok,got you now")
}
let rightcode = "password"
passwordCheck(code:rightcode)
所以,要記得一件事情,guard...else有一個特點是:會先描述條件不符合後執行的內容,然後在執行完後,若符合條件才會執行符合條件的內容。
或者回到剛剛的說法:守衛總是會記得誰看起來像是壞人,誰是壞人就讓壞人不能進來,好人則可以進來。
使用guard…else的優勢
這裡我想套用之前在網路上看到彼得潘對guard…else的描述:
可讀性佳
不用浪費時間讀取不需要的程式碼
大概在這裡可以重新描述他在第一點裡提到的:if…else通常會把所有條件論述一遍,最後才產出結果,而guard…else只有執行一回合的程式語言,如果執行如果為否,則立馬產出結果。
而可讀性這件事情,大抵可以說大家都知道guard是只要暸解一個條件,就會產出兩個結果,且一翻兩瞪眼的邏輯,所以不用if…else這要查看很多邏輯條件啊!
如果你對上一篇的if…else算是熟悉,你可以大概的知道if…else的程式邏輯是一個區塊又一個區塊的,而在這裡,三元運算子提供了一個更簡便的寫法:
原先的if…else大概會讓程式語言的呈現變成下面這樣:
let isTainan = true
if isTainan{
print("food alway sweet")
}else{
print("not really add suger in food")
}
但這種情況由於邏輯簡單,所以可以以三元運算子的方式下去處理,公式大概如下:
「條件」?「符合條件的結果」:「不符合條件的結果」
或者套用Syashin Chen的說法更為簡單:
公式: a ? b : c,條件 a 為 True ,回傳 b。條件 a 為 false ,回傳 c。
let isTainan = true
print(isTainan ? "food alway sweet":"not really add suger in food")
Switch case到底在幹什麼呢?要我形容,它就是一個多條件同時判斷的判斷式,網路上有相關評測大概是有提到if…else跟Switch case到底哪個比較耗時,結論是if…else比較耗時。(前提是跑類似內容的東西,我不知道我這樣講好不好)
1.Switch Case
如下面所說的,Switch case一次就會描述所有的條件,然後,還會追加一個條件叫做默認條件(default),基本上Switch case在運作的時候,只要匹配到第一個符合條件的項目,就會結束整個程式,這也就是它跟if…else相比快的地方。
Switch case在寫的時候,必須注意幾件事情:
鐵人賽