Kotlin編程實(shí)踐7章 作用域函數(shù)let/run/apply/also

let、run、apply、also

1、使用apply函數(shù)在構(gòu)造結(jié)束后初始化對象

apply的接收者與返回值是同一個(gè)對象,該函數(shù)使用它的接收者調(diào)用給定代碼塊,并在執(zhí)行完后將其返回。
最常用于對已經(jīng)實(shí)例化的對象進(jìn)行額外的配置。

2、使用also函數(shù)進(jìn)行其他操作

also 接收者在執(zhí)行block參數(shù)后返回,最常用于將函數(shù)調(diào)用鏈接到對象上。

val block = createBook()
    .also{println(it)}
    .also{Logger.getAnonymousLogger().info(it.toString())}

在block內(nèi)部使用it引用該對象。
also返回了上下文。

3、使用let函數(shù)與Elvis

let返回block的結(jié)果而不是上下文對象!因此更像是一個(gè)上下文對象轉(zhuǎn)換器。
如:將字符串內(nèi)容轉(zhuǎn)大寫并特殊處理

fun processString(str:String) = 
    str.let{
        when{
            it.isEmpty() ->"Empty"
            it.isBlank() ->"Blank"
            else -> it.capitalize()
        }
    }

當(dāng)參數(shù)是可空時(shí)候:

fun processString(str:String?) = 
    str?.let{
        when{
            it.isEmpty() ->"Empty"
            it.isBlank() ->"Blank"
            else -> it.capitalize()
        }
    }?:"Null"

組合使用安全調(diào)用操作符?.、let函數(shù)、以及?:可以輕松處理所用情況,這時(shí)kotlin慣用語法,因?yàn)樗梢宰屇爿p松處理空余非空兩種情況。

4、使用let函數(shù)代替臨時(shí)變量

如一個(gè)可變字符串列表,然后將它映射到他們的長度并過濾結(jié)果

val numbers = mutableListOf("one","two","three","four","five")
val resList = numbers.map{it.length}.filter{it>3}
println(resList)

使用let重構(gòu)后

val numbers = mutableListOf("one","two","three","four","five")
numbers.map{it.length}.filter{it>3}.let{
    println(resList)
    //更多操作。
}

上面不是將結(jié)果賦值給臨時(shí)變量,因此可以在塊中打印或更多操作。

如果只是打印,則可簡化為:

val numbers = mutableListOf("one","two","three","four","five")
numbers.map{it.length}.filter{it>3}.let(::println)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容