☰
Kotlin作用域函数全解析:let、run、apply、also
2026/9/29 21:59:46 网站建设 项目流程

Kotlin作用域函数全解析:let、run、apply、also

  • Kotlin作用域函数全解析:let、run、apply、also
    • let
    • run
    • apply
    • also
    • 对比示例

Kotlin作用域函数全解析:let、run、apply、also

作用域函数就是为对象开辟一个临时作用域,简化代码,避免重复写对象名,一共 4 个核心,核心区分看两点:

  1. 接收参数:it还是this
  2. 返回值:lambda结果还是对象本身
函数内部引用对象返回值典型用途
letitlambda 最后一行结果空安全处理,对象转换
runthislambda 最后一行结果对象内部操作 + 返回计算结果
applythis原对象本身对象初始化,批量设置属性
alsoit原对象本身附加额外操作,日志、调试

let

  • 内部访问对象:it
  • 返回:lambda 表达式的返回值(最后一行)
  • 最常用:?.let做空安全
valstr:String?="hello"vallen=str?.let{println(it.length)// it 代表str,非空it.length// 返回值给到 len}// str为null,整个let不执行,len=null

适用场景:

  • 可空对象安全调用
  • 需要把对象转成另一个值

❗内部是it,不能直接访问属性,要it.xxx

run

  • 内部访问对象:this(可以省略 this)
  • 返回:lambda 最后一行结果
  • 兼具 apply + let 的部分特性
valresult="abc".run{// this 是字符串,可以省略length+10}println(result)// 13// 空安全 runvalstr:String?="kotlin"valres=str?.run{uppercase()// this.uppercase()}

适用:对对象做一系列计算,需要返回计算结果,直接访问对象属性方法(this 省略)

和 let 区别:run用this,let用it

apply

  • 内部访问对象:this(可省略)
  • 返回:原对象本身!!最常用于对象构建、批量赋值
dataclassUser(varname:String="",varage:Int=0)valuser=User().apply{name="张三"age=20}// apply返回自己,直接赋值给user

链式调用很舒服,初始化实例首选 apply。

返回对象本身,所以可以链式继续调用对象方法。

also

  • 内部访问对象:it
  • 返回:原对象本身
vallist=mutableListOf<Int>().also{it.add(1)it.add(2)println(it)// 打印日志}// also返回list对象

典型场景:做附加操作:打印日志、调试、埋点,不改变对象,做完操作继续把对象往下传。

和 apply 对比:
apply:this,适合修改对象属性
also:it,适合额外的附带操作

对比示例

valobj="test"vala=obj.let{it.length}// it,返回4valb=obj.run{length}// this,返回4valc=obj.apply{println(this)}// this,返回"test"vald=obj.also{println(it)}// it,返回"test"

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询