在Kotlin中的實用語法
Kotlin的標準程式庫裡面有一些實用的標準函數,可以讓我們在寫程式的時候能寫出更簡潔、易讀的程式碼,接下來我們就來認識他們吧!
apply
通常在沒有apply的世界,我們要創建一個檔案並且給他一些基本設定的時候我們會這樣寫:
使用apply的時候,程式碼會變成這樣:
我們可以看到,在apply的lambda函數後面有一個 this: File
的提示,代表在這個lambda函數裡面我們可以使用“this”這個關鍵字來代替“kuroFile這個變數”,而在語法上大部分的時候“this”這個關鍵字是可以省略的,所以使用apply的時候我們就可以不需要再寫一堆同樣的變數名稱。而且apply會回傳呼叫的物件本身。
also
跟apply很像的是also,至於為什麼很像,我們來看看範例:
also跟apply一樣的是會回傳呼叫函數的物件本身,但是他的提示不是“this”而是“it”,因為it沒辦法省略,所以我們通常不會使用also來做像apply這樣一長串的物件設定,而是會拿來做不會影響到物件本身的函數呼叫或是輸出運算結果:
run
run在lambda函數裡面的特性跟apply是一樣的,只不過run會回傳“最後一行的結果”:
run適合用來對物件做完設定之後取值,或是用來拆開巢狀函數呼叫,讓我們的程式碼不會那麼“巢”。另外run也可以不需要透過物件獨立呼叫,不過比較少這樣使用。
let
我們在前面講到nullable型態的時候有看到let函數,這邊我們正式介紹他。let是run跟also的結合,他在lambda函數裡面使用“it”並且回傳lambda函數的最後一行。當然let也有不少合適的使用情境,不過我們最常拿他來幫nullable物件做而外的運算處理。
with
with跟run是幾乎一樣的東西,他需要傳入一個引數,後面的lambda函數會使用這個傳入的引數,並且返回lambda函數的最後一行。跟run不同的是,因為run可以對nullable型態選用安全呼叫,但是with無法。
takeIf/takeUnless
takeIf跟takeUnless兩個是很相似的東西,依照字面上的意思,我們可以理解成“如果......就拿走”/“如果不......就拿走”。他們的lambda函數最後都要回傳布林值,如果為true/false,就會回傳原本的物件。如果為false/true就會回傳null
Last updated