Kotlin标准函数(let,with,run,apply)

0、let函数

image-20210902195332936

// 作用1:使用it替代object对象去访问其公有的属性 & 方法
object.let{
   it.todo()
}

// 作用2:判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
   it.todo()
}

// 注:返回值 = 最后一行 / return的表达式

1、with函数

with函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下:

val result = with(obj) {
    //这里是obj的上下文
    "value" //with函数的返回值
}

比如有一个水果列表,现在我们想吃完所有水果,并将结果打印出来,就可以这样写:

fun main(){
    val list = listOf("apple", "banana", "orange", "pear", "grape")
    val builder = StringBuilder()
    builder.append("Start eating fruits\n")
    for (fruit in list){
        builder.append(fruit).append("\n")
    }
    builder.append("Ate all fruits")
    val result = builder.toString()
    println(result)
}

就是使用StringBuilder来构建吃水果的字符串,最后将结果打印出来。

image-20210902193240365

仔细观察上述代码,你会发现我们连续调用了很多次builder对象的方法。其实这个时候就可以考虑使用with函数来让代码变得更加精简,如下所示:

    val list = listOf("apple", "banana", "orange", "pear", "grape")

    val result = with(StringBuilder()){
        append("Start eating fruits\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits")
        toString()
    }
    println(result)

2、run函数

val result = obj.run {
    //这里是obj的上下文
    "value" //run函数的返回值
}

和with函数差不多

    val result = StringBuilder().run {
        append("Start eating fruits\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruit")
        toString()
    }
    println(result)

3、apply函数

apply函数和run函数也是极其类似的,都要在某个对象上调用,并且只接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下文,但是apply函数无法指定返回值,而是会自动返回调用对象本身

val result = obj.apply {
    //这里是obj的上下文
}
//result == obj
    val result = StringBuilder().apply {
        append("Start eating fruits\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruit")
    }
    println(result.toString())

由于apply函数无法指定返回值,只能返回调用对象本身,因此这里的result实际上是一个StringBuilder对象,所以我们在最后打印的时候还要再调用它的toString()方法才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值