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

在 Kotlin 中,let、run、with、apply 和 also 是常用的作用域函数(scope functions)。它们的目的都是简化代码,使代码更加简洁,并且可以提供更好的可读性。每个函数在不同的场景下有不同的行为。

下面是这 5 种作用域函数的简单示例代码,帮助理解它们的差异和用法。

1. let

let 函数接收一个对象作为参数,并返回一个值。它常用于对对象进行操作,然后返回操作的结果。

示例:

fun main() {
    val str = "Hello, Kotlin"
    
    val length = str.let {
        println("The string is: $it")  // 'it' 是传入的对象
        it.length  // 返回的是字符串的长度
    }
    
    println("Length of the string is: $length")
}

解释:

  • it 是传入 let 函数的对象。
  • let 会返回 it.length,即字符串的长度。

2. run

run 函数类似于 let,但它不仅可以访问对象,而且可以访问 this。run 常用于对对象进行一系列操作,并返回最终结果。

示例:

fun main() {
    val str = "Hello, Kotlin"
    
    val result = str.run {
        println("The string is: $this")  // 'this' 引用对象
        length  // 返回的是字符串的长度
    }
    
    println("Length of the string is: $result")
}

解释:

  • run 允许你访问对象的 this,因此可以直接使用 this.length 来访问对象的属性。

3. with

with 也是一个作用域函数,但是它和 run 的不同之处在于,with 的第一个参数是对象,而它不返回对象,而是返回一个值。with 通常用于作用于某个对象的多个操作。

示例:

fun main() {
    val str = StringBuilder("Hello, Kotlin")
    
    val result = with(str) {
        append(" World!")
        append(" Let's Learn Kotlin.")
        toString()  // 返回结果是最终的字符串
    }
    
    println(result)  // 输出: Hello, Kotlin World! Let's Learn Kotlin.
}

解释:

  • with 函数的第一个参数是 str,可以在 with 代码块中直接访问 str 的属性和方法,而无需使用 this 或 it。
  • with 的返回值是 toString(),即拼接后的字符串。

4. apply

apply 函数与 run 相似,区别在于 apply 总是返回对象本身,而不是一个结果值。它通常用于对对象进行初始化。

示例:

fun main() {
    val str = StringBuilder().apply {
        append("Hello")
        append(", Kotlin!")
    }
    
    println(str)  // 输出: Hello, Kotlin!
}

解释:

  • apply 返回对象本身,即 StringBuilder,并在代码块中执行 append 操作。
  • apply 最常用于对象初始化时,代码块中的操作会对该对象进行修改。

5. also

also 与 let 很相似,最大的不同是 also 会返回原始对象本身,而不是处理后的结果。also 常用于副作用操作,比如打印调试信息。

示例:

fun main() {
    val str = "Hello, Kotlin"
    
    str.also {
        println("The string is: $it")  // 'it' 引用传入的对象
    }
    
    println("The original string is: $str")
}

解释:

  • also 执行的操作主要用于副作用,通常会在链式调用中用于做额外的操作(如打印、日志等),而不会修改对象。
  • also 返回的是原始对象 str,因此可以继续链式调用。

总结:

函数主要用途返回值访问对象的方式
let对对象进行操作并返回处理结果处理结果it
run对对象进行操作并返回处理结果处理结果this
with对对象进行多次操作并返回处理结果处理结果this
apply对对象进行初始化并返回对象本身原始对象本身this
also对对象进行副作用操作并返回对象本身原始对象本身it

这些作用域函数在 Kotlin 中为开发者提供了灵活的工具,使得代码更加简洁和可读。在实际开发中,选择合适的作用域函数能够有效提升代码的可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿界新星蔡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值