Kotlin_作用域函数let/also/with/run/apply

2024-07-06 08:23:18 浏览数 (2)

1.let

仅当调用对象不为 null 时执行

代码语言:javascript复制
name?.let {
	println("name: $it")
	it.fun1() // 不需要: 判空 或 ?.
	it.fun2()
	it.fun3()
} // 最后一行为返回值

2.also

跟 let 类似,但返回的是传入对象本身

代码语言:javascript复制
val result = name?.also {
	// do something
} // 返回 name

3.with

调用同一个对象的多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可

代码语言:javascript复制
with(person) {
	println("name:${name}") // name:null
}

4.run

代码语言:javascript复制
person.run {
	name = "momo"
	age = 2
}

5.apply

跟 run 类似,不过返回的是传入对象本身

代码语言:javascript复制
val person = Person().apply {
    name = "John"
    age = 25
} // 返回初始化好的对象

6.总结对比

作用域函数

是否判空

参数

返回值

扩展函数

说明

let

判空

it

最后一行

减少频繁判空

also

判空

it

返回this

对对象执行操作后返回

with

不判空

this指代当前对象/省略

省去写对象

run

判空

this指代当前对象/省略

省去写对象

apply

不判空

this指代当前对象/省略

返回this

常用于初始化对象

0 人点赞