用邏輯控制一切!
很多時候我們會需要“利用一些條件,決定我們要執行的事項”,接下來我們就來看看在Kotlin裡面常見的幾種條件語法吧!
if/else語句
首先我們先來看這個範例:
我們可以看到這邊多了兩個關鍵字 “if” 跟 “else”,首先我們先來看看“if”的部分:
如果......怎麼樣的時候......就做什麼事......否則......就做另一件事
首先我們看到在“if“後面會跟著一對“( )”跟一對“{ }”
“( )”裡面可以放進“一句可以運算出布林值”的語句
“{ }”裡面放入“如果上面的語句為true”時要執行的事情
再來我們看到“else”後面有一對“{ }”
“{ }”裡面放入“if那邊的( )內的語句為false”時要執行的事情
else不可以單獨存在
我還需要更多!
上面介紹的“if/else”只能容納兩個條件,可是如果我們需要更多更多條件的話怎麼辦? 這個時候就需要“else if”出場啦!
“else if”具備“if”跟“else”的部分性質
“( )”裡面可以放進“一句可以運算出布林值”的語句
“{ }”裡面放入“如果上面的語句為true”時要執行的事情
必須跟在“if”後面
巢狀條件語句(避免使用)
有些時候我們會需要多項條件才能做出判斷,這個時候我們可以在條件的執行區塊裡面再加入條件語句:
透過巢狀條件語句,我們可以加入多項條件完成判斷,讓我們的程式可以處理更多、更複雜的條件判斷
“雖然巢狀條件判斷可以讓我們加入越來越多判斷條件,可是一旦條件變得越來越多,我們寫出來的Code也會變得越來越巢。這樣不僅會妨礙我們閱讀,同時也容易造成維護上的困難,所以除非不得已的情況,建議儘量避免使用巢狀條件判斷。例如上面的範例,其實也可以改成這樣”
條件運算式
接下來回到ex. 4-2裡面,我們會發現每個if/else區塊裡面,都有使用println這個函式。如果我們今天需要修改輸出資訊的方式,就會需要每個地方都改。這樣工作不僅繁瑣,也增加了不小心沒有改到的風險。那要怎麼解決呢?我們先來看看下面的例子:
在這個例子裡面我們會發現if/else語句可以“產生”一個值出來,然後設定給變數。具體來說我們可以使用判斷語句回傳值,而如果我們這樣做的話,將會輸出判斷區塊的最後一行輸出結果。這樣一來,我們就可以將輸出跟判斷的部分分開來撰寫,更容易閱讀、維護
這邊有一個值得注意的地方,就是如果我們要用條件判斷回傳數值,在最後都必須要加上else,以確保在任何條件下,都會有數值回傳
刪除 { } (避免使用)
在分支區塊裡面如果只有一行語句的情況,我們可以把“{ }”省略掉
‘為什麼儘量不要刪除{ }?’
“在我們刪除{ }之後,可以發現區塊的界線變得不明確,尤其是當區塊內的語句不只一行的時候。就會越來越難閱讀,而且會容易搞錯區塊的範圍,造成不必要的麻煩,所以大部分的開發者都不太會這樣做”
Range
在有一些語言裡面,這種多個數字區間要做判斷的寫法大多會用刪去法,不然就是得要使用
這種看起來不怎麼漂亮也比較不直觀的寫法。不過在Kotlin裡面提供了一個方便的數值範圍判斷工具:Range,接下來我們可以看看要怎麼使用Range改寫ex. 4-5裡面的判斷式
這個範例裡面出現了兩個新的運算子“in”還有“..”,首先我們來介紹“..”:
rangeTo
“..”是一個用來標示某個範圍的運算子,在上面範例的“1..3”代表“從1開始到3為止”的數字範圍
contains
“in”則是用來檢查左邊的數值,有沒有包含在右邊的範圍裡面
when運算式
當我們判斷的條件越來越多的時候,我們會覺得要寫很多if/else if/else if/....../else這樣顯得太笨重,而且讀起來依舊不夠直覺。在Kotlin裡面我們有更直覺的方法可以表示,那就是when運算式
在這個例子裡面我們可以看到when運算式的表示方式,在Kotlin裡面只要有用到else if的時候都建議更改成when運算式,而when運算式也有著else if沒有的一些優點,這個我們會在後面的講道列舉跟封裝類別的時候來探討。
Last updated