kotlin 之几个常见的内联函数(五)

本文详细解析了Kotlin中的also函数,与let函数的区别在于返回值,适用于链式调用。通过实例演示了also在实际操作中的使用,并对比了与Java代码。掌握这个函数有助于理解Kotlin的函数式编程特性。
摘要由CSDN通过智能技术生成

上一篇讲了apply,链接在下面,有兴趣的同学可以去看看

kotlin 之几个常见的内联函数(四)_水很清的博客-CSDN博客

这一篇讲解最后一个内联函数also,话不多说,开始。

also函数

 一、函数结构为

public inline fun  T.also(block: (T) -> Unit): T { block(this); return this }

从结构上可以看出,also与apply一样,与let、with、run不同,它没有R类型,它是对原始数据T操作处理后再将T返回。

二、一般使用结构:

 object.also{
//todo
}

与let 类似

三、also函数底层的inline扩展函数+lambda结构

@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }

四、函数结构分析

also函数的结构实际上和let很像唯一的区别就是返回值的不一样,let是以闭包的形式返回,返回函数体内最后一行的值,如果最后一行为空就返回一个Unit类型的默认值。而also函数返回的则是传入对象的本身

五、举个栗子

//kotlin
fun main(args: Array<String>) {
    val result = "testLet".also {
        println(it.length)
        1000
    }
    println(result)
}

代码分析:如果是let,result将等于1000,而also的话,result=“testLet”

六、kotlin 与 java的代码对比

//kotlin
fun main(args: Array<String>) {
    val result = "testLet".also {
        println(it.length)
        1000
    }
    println(result)
}
 
//java
public final class AlsoFunctionKt {
   public static final void main(@NotNull String[] args) {
      Intrinsics.checkParameterIsNotNull(args, "args");
      String var2 = "testLet";
      int var4 = var2.length();
      System.out.println(var4);
      System.out.println(var2);
   }
}

七、使用场景

适用于let函数的任何场景,also函数和let很像,只是唯一的不同点就是let函数最后的返回值是最后一行的返回值而also函数的返回值是返回当前的这个对象。一般可用于多个扩展函数链式调用。

至此5个内联函数都讲解完了,下一篇文章弄个表格做个总结。that's all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值