初始Kotlin 之5__let
阿新 • • 發佈:2021-02-07
技術標籤:Kotlin
一. 定義
let輔助工具, let是一個函式。它提供了函式式API的程式設計介面, 並將原始呼叫物件作為引數傳遞到Lambda表示式中。
語法如下:
obj.let{
obj_ ->
... //使用者業務邏輯
}
這裡呼叫了obj物件的let函式,然後Lambda表示式中的程式碼主會立即執行,並且這個obj物件本身還會作為引數傳遞到Lambda表示式中。不過,為了防止變數重名,這裡將引數名改成了obj_, 實際上是同一個物件, 這就是let函式的作用。
let函式屬於Kotlin中的標準函式。
二. 作用, let函式的一個作用是與?.配合,可以在空指標檢查 有效。
fun doLearn(learn: Learn?){
learn?.let{
learn_ ->
learn_.readBooks()
learn_.doSchoolwork()
}
}
?.表示物件為空時什麼都不做, 物件不為空時就呼叫let函式, 而let函式會交learn物件本身作為引數傳遞到Lambda表示式中,此時的learn物件肯定不空了。
當Lambda表示式的引數列表中只有一個引數時,可以不用宣告引數名, 直接使用it關鍵字來代替即可,上述程式碼可以進一步簡化成:
fun doLearn(learn: Learn?){ learn?.let { it.readBooks() it.doSchoolwork() } }
三. let函式是可以處理全域性變數的判空問題的,但是使用 if 判斷 則無法做到這一點。 例如我們將doLearn()的引數變成一個全域性變數,使用 let函式仍然可以正常工作, 但使用 if 判斷則會報錯。
var learn: Learn? =null
fun doLearn(){
learn?.let {
it.readBooks()
it.doSchoolwork()
}
}
使用if判斷
報錯原因是: 全域性變數的值隨時都有可能被其他執行緒修改, 即使作了判斷空處理,也無法保證if語句中的learn沒有空指標風險。