• Kotlin内置函数let、run、apply的区别


    序、慢慢来才是最快的方法。

    Kotlin 中的 letrun 和 apply 都是 Scope Functions(作用域函数),用于限定一个代码块的作用域。它们的区别在于返回值和使用场景上。

    let函数

    源码:

    1. @kotlin.internal.InlineOnly
    2. public inline fun T.let(block: (T) -> R): R {
    3. contract {
    4. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    5. }
    6. return block(this)
    7. }

    使用:

    1. intent.extras?.let {
    2. shareId = it.getInt(Constant.CONTENT_ID_KEY, -1)
    3. shareTitle = it.getString(Constant.CONTENT_TITLE_KEY, "")
    4. shareUrl = it.getString(Constant.CONTENT_URL_KEY, "")
    5. }
    • let 函数是将一个对象作为 lambda 表达式的参数,在 lambda 表达式内部可以通过 it 引用这个对象。它的返回值是 lambda 表达式的执行结果。
    • 由于 let 函数的返回值就是 lambda 表达式的执行结果,所以我们可以继续链式调用另一个 let 函数,并在其内部打印出转换后的字符串。
    • let 函数适合对一个对象进行一系列处理,并返回处理结果的场景。

    run函数

    源码:

    1. @kotlin.internal.InlineOnly
    2. public inline fun T.run(block: T.() -> R): R {
    3. contract {
    4. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    5. }
    6. return block()
    7. }

    使用:

    1. toolbar.run {
    2. title = resources.getString(R.string.login)
    3. setSupportActionBar(this)
    4. supportActionBar?.setDisplayHomeAsUpEnabled(true)
    5. }
    • run 函数是将一个对象作为 lambda 表达式的接收者,在 lambda 表达式内部可以通过 this 或省略掉 this 直接访问对象的方法和属性。它的返回值是 lambda 表达式的执行结果。
    • run 函数适合对一个对象进行一系列处理,并返回处理结果的场景。它和 let 函数的不同在于,run 函数将 lambda 表达式的执行结果作为返回值,而 let 函数将 lambda 表达式的参数作为返回值。
       

    apply函数

    源码

    1. @kotlin.internal.InlineOnly
    2. public inline fun T.apply(block: T.() -> Unit): T {
    3. contract {
    4. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    5. }
    6. block()
    7. return this
    8. }

    使用

    1. toolbar.apply {
    2. title = ""//getString(R.string.loading)
    3. setSupportActionBar(this)
    4. supportActionBar?.setDisplayHomeAsUpEnabled(true)
    5. }
    • apply 函数是将一个对象作为 lambda 表达式的接收者,在 lambda 表达式内部可以通过 this 或省略掉 this 直接访问对象的方法和属性。它的返回值是对象本身。
    • apply 函数适合对一个对象进行一系列操作,例如初始化对象的属性,而不需要返回结果的场景。因为它返回的是对象本身,所以可以使用链式调用。

    run和apply的区别

    • run函数返回最后一行的值/表达式
    • apply函数返回传入的对象的本身
  • 相关阅读:
    某商业银行关键系统应用场景存储选型运维实践
    MapStruct_概念、如何使用、子集和映射、合并、Spring方式、表达式、自定义切面处理
    Docker基础命令操作
    图像分割(二)——低照度下自然场景下图像分割的一种新方法
    内置属性-top栏切换
    vue3中自定义Ref
    python 常用文件读取和保存方式汇总
    2017年亚太杯APMCM数学建模大赛B题喷雾轨迹规划问题求解全过程文档及程序
    【电控笔记5.8】数字滤波器设计流程&频域特性
    链表相关算法题
  • 原文地址:https://blog.csdn.net/qq_37492806/article/details/133605313