Kotlin中let、run、with、apply及also的用法和差别

kotlin有很多种作用域函数,很多文章介绍也大致相同,巧妙的使用这些作用域是区别于JAVA不同的编码方式

下面通过通俗易懂的方式讲解它们的各自用法和差别,如果有说的不对的地方,希望大家加以指正

let

重点 适合带返回值的写法

例如

var state = PowerConnector.getPowerState()?.powerStatus.let { 
            it 
        } ?: PowerState.NORMAL
        return state

1.如果let块中的最后一条语句如果是非赋值语句,默认情况下它是返回语句,如果不是,则返回的是一个Unit类型~
2.如上面代码,let用于判空检查,如需对非空对象执行操作,可对其使用安全调用操作符,适用于以上判空赋值返回值的场景~
3.let可以将“It”重命名为一个可读的lambda参数

run

重点 run函数以 this 作为上下文对象,且它的调用方式与let一致,另外,当 lambda 表达式同时包含对象初始化和返回值时,run更加适用

    val list = listOf("china", "swizerland", "amarica")
    val str = StringBuilder().run {
        append("go to.\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        toString()
    }
    println(str)

with

with属于非扩展函数,同时,它与run做着同样的事情

重点 with使用的是非null的对象,当函数块中不需要返回值时,可以使用with

apply

apply是 T 的扩展函数,与run函数有些相似

重点 apply函数主要用于初始化或更改对象,因为它用于在不使用对象的函数的情况下返回自身

val weatherDetail = WeatherDetail("Beijing").apply {
    weather = "sunny"
    postcode = 100010
    tip = "天气热,注意防暑降温" 
}

also

also是 T 的扩展函数,返回值与apply一致,直接返回T。also函数的用法类似于let函数

also作用域内使用it指代调用者。有返回值,返回值为调用者自身

重点 因为T作为block函数的输入,可以使用also来访问属性。所以,在不使用或不改变对象属性的情况下也使用also

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值