1. 程式人生 > 其它 >初始Kotlin 之5__let

初始Kotlin 之5__let

技術標籤: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沒有空指標風險。