Kotlin 提供的五个作用域函数(applyletwithrun 和 also)可以帮助简化代码,但它们之间的区别可能会让人感到困惑。接下来,我将详细解释这些函数的区别,以及第 13 点提到的解构声明。

1. apply

apply 的作用是对一个对象进行配置,它会返回调用该函数的对象本身。一般用于在创建对象时需要对其进行多次配置的场景。

  • 返回值: 对象自身。
  • this 引用: 在 apply 块中,this 代表调用者对象。
  • 常见场景: 对对象进行初始化或修改。

kotlin

复制代码

val person = Person().apply { name = "John" age = 30 }

2. let

let 主要用于对对象进行某种转换或执行某些操作,通常与空安全调用结合使用。

  • 返回值: Lambda 表达式的结果。
  • it 引用: 在 let 块中,it 代表调用者对象。
  • 常见场景: 空安全检查、链式调用。

kotlin

复制代码

val nameLength = person.name?.let { it.length }

3. with

with 并不是一个扩展函数,而是一个常规函数。它通常用于调用多个对象的方法或属性。with 的主要好处是在处理一个对象时,减少重复引用。

  • 返回值: Lambda 表达式的结果。
  • this 引用: 在 with 块中,this 代表传入的对象。
  • 常见场景: 处理非可空对象的多个属性或方法。

kotlin

复制代码

val result = with(person) { println(name) println(age) name + age }

4. run

run 既可以作为扩展函数也可以作为顶层函数,常用于执行一个代码块,并且返回其最后一行的值。

  • 返回值: Lambda 表达式的结果。
  • this 引用: 在 run 块中,this 代表调用者对象。
  • 常见场景: 当需要对对象执行某些操作并返回结果时,或者用于执行不返回对象本身的代码块。

kotlin

复制代码

val personName = person.run { println(name) name }

5. also

also 类似于 let,但区别在于它返回调用对象本身,而不是 Lambda 表达式的结果。它的作用是进行额外的操作,通常用作调试或链式调用的一部分。

  • 返回值: 对象自身。
  • it 引用: 在 also 块中,it 代表调用者对象。
  • 常见场景: 在链式调用中进行额外的操作,例如打印日志或调试。

kotlin

复制代码

val person = Person().also { it.name = "John" it.age = 30 println(it) }

作用域函数总结:

  • 返回值:
    • 返回自身: applyalso
    • 返回 Lambda 结果: letrunwith
  • 引用对象:
    • thisapplyrunwith
    • itletalso
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐