当前位置: 首页 > ai >正文

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

http://www.xdnf.cn/news/8564.html

相关文章:

  • SQL 语言
  • 策略建模:AI系统背后的“心灵感应”技术
  • 一文快速了解Vue3服务端渲染(SSR)
  • Windows逆向工程提升之IMAGE_RESOURCE_DIRECTORY
  • linux taskset 查询或设置进程绑定CPU
  • Vue3的模块化设计: 使用Script Setup API
  • 人脸美颜磨皮祛痘3:深度学习SUNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)
  • 【MPC控制 - 从ACC到自动驾驶】ACC系统原理与MPC初步认知
  • P3392 涂条纹
  • 零基础学习计算机网络编程----网络基本知识
  • python安装
  • css五边形
  • Spring boot使用
  • Git使用
  • 串扰与反射对信号完整性的影响
  • Spring Boot微服务架构(四):微服务的划分原则
  • 精益数据分析(82/126):先行指标驱动的增长黑客策略——从相关性到因果性的跨越
  • 基于大模型预测的视神经脊髓炎技术方案
  • Java—— IO流的应用
  • Python 爬虫之requests 模块的应用
  • Trae(The Real Al Engineer)
  • SQL每日一练(2)
  • Vue3响应式数据: 深入分析Ref与Reactive
  • React 文件分片上传与下载全解析
  • 听课笔记之中国式现代化导论
  • 提效-点击跳转到源码
  • C++系统IO
  • 电脑C盘清理技巧:释放空间,提升性能
  • 【MySQL】表的内外连接
  • 缓存的更新机制