kotlin 常用函数
Kotlin 作用域函数详解:apply
、let
等五大函数对比
Kotlin 提供了多个作用域函数(Scope Functions),它们都是在对象的上下文中执行代码块的扩展函数。最常用的五个是:let
、run
、with
、apply
和 also
。它们的主要区别在于:
- 1.
引用对象的方式(
this
或it
) - 2.
返回值类型(返回上下文对象本身或返回 lambda 结果)
下面是详细对比和使用场景:
📊 五大作用域函数对比表
函数 | 上下文对象引用 | 返回值 | 是否扩展函数 | 典型使用场景 |
---|---|---|---|---|
let |
| lambda 结果 | 是 | 非空检查、转换对象 |
run |
| lambda 结果 | 是 | 对象配置并计算结果 |
with |
| lambda 结果 | 否 | 对已有对象进行分组操作 |
apply |
| 对象本身 | 是 | 对象初始化配置 |
also |
| 对象本身 | 是 | 执行附加操作(日志、验证等) |
🧩 详细解析与代码示例
1. let
函数
- •
引用对象:
it
- •
返回值:lambda 的最后一行
- •
主要用途:安全调用非空对象、对象转换
kotlin
复制
// 示例1: 安全调用
val name: String? = "Kotlin"
val length = name?.let {println("Name is $it")it.length // 返回值
} ?: 0 // 如果为null则返回0// 示例2: 链式转换
val numbers = listOf(1, 2, 3)
val doubled = numbers.map { it * 2 }.let { println("Doubled: $it")it.filter { num -> num > 3 } // 返回值}
2. run
函数
- •
引用对象:
this
(可省略) - •
返回值:lambda 的最后一行
- •
主要用途:对象配置并计算结果
kotlin
复制
val rectangle = Rectangle().run {width = 100height = 50calculateArea() // 返回值
}println("Area: $rectangle") // 输出面积
3. with
函数
- •
引用对象:
this
(可省略) - •
返回值:lambda 的最后一行
- •
主要用途:对已有对象进行分组操作(非扩展函数)
kotlin
复制
val builder = StringBuilder()
val result = with(builder) {append("Hello")append(" Kotlin")toString() // 返回值
}
4. apply
函数
- •
引用对象:
this
(可省略) - •
返回值:对象本身
- •
主要用途:对象初始化配置
kotlin
复制
// 创建并配置Intent
val intent = Intent().apply {action = "com.example.ACTION"putExtra("key", "value")flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
// intent 已配置好,可以直接使用
5. also
函数
- •
引用对象:
it
- •
返回值:对象本身
- •
主要用途:执行附加操作(日志、验证等)
kotlin
复制
val user = User().also {println("User created: $it")validateUser(it) // 执行验证但不影响返回值
}.apply {name = "Alice"age = 30
}