前言
條件運算這件事情,除了基本型的if…else,還有一種,叫做guard…else,誠如上一篇簡短的描述:
guard…else 如其名,像個守衛,如果你符合它守護的原則,那麼你所提的條件就會被它接納,否,則被踢除,端看else後的條件是什麼,產出產物。
guard的邏輯是某條件為真,不然就是某條件為假,產出兩種結果。
if…else則是可以包含多重條件的前提,然後進行篩選,和guard比較的話,會有一種感覺是:guard比較單純,就是符合條件或不符合條件兩者。
總之,guard在操作上有點像個守衛,你是好人,就讓你進來,你是壞人,就掰掰。
正文

稍微描述一下上面的邏輯:
guard…else的運作邏輯,是會先描述「不符合條件裡的話,會發生什麼事情」,然後再描述「如果符合邏輯的話,會有什麼結果」。
那,既然有if…else,為什麼還要有guard…else這個條件運算的邏輯存在呢?
使用guard…else的優勢
這裡我想套用之前在網路上看到彼得潘對guard…else的描述:
- 可讀性佳
- 不用浪費時間讀取不需要的程式碼
大概在這裡可以重新描述他在第一點裡提到的:if…else通常會把所有條件論述一遍,最後才產出結果,而guard…else只有執行一回合的程式語言,如果執行如果為否,則立馬產出結果。
而可讀性這件事情,大抵可以說大家都知道guard是只要暸解一個條件,就會產出兩個結果,且一翻兩瞪眼的邏輯,所以不用if…else這要查看很多邏輯條件啊!
補充:三元運算子(termary operator)
如果你對上一篇的if…else算是熟悉,你可以大概的知道if…else的程式邏輯是一個區塊又一個區塊的,而在這裡,三元運算子提供了一個更簡便的寫法:
原先的if…else大概會讓程式語言的呈現變成下面這樣

如果換成三元運算子的邏輯下去寫:

公式大概如下:
「條件」?「符合條件的結果」:「不符合條件的結果」
或者套用Syashin Chen的說法更為簡單:
公式: a ? b : c,條件 a 為 True ,回傳 b。條件 a 為 false ,回傳 c。
打印出來的結果都是一樣的:

小記:在學習guard…else的過程有點模糊,後來經過這一次複習才比較暸解它的運作模式,三元運算子也算是重新好好的複習過一遍,所以這次應該會有蠻好的收穫了。