Kotlin 函数 let、with、run、apply、also区别与使用场景

在 Kotlin 中,let、with、run、apply 和 also 是五个非常常用的标准函数。它们都属于 Kotlin 的 作用域函数,用于提升代码可读性、避免重复、简化 null 判断等。

总览对比表

但初学时常常会混淆它们的区别:到底什么时候用哪个?它们的接收对象是哪个?返回值又是什么? 这篇文章将从 区别、和使用场景,两个维度来学习它们的本质和应用。

函数 接收对象(this / it) 返回值 主要用途
let it Lambda 表达式结果 作用域限制、null 安全、链式操作
run this Lambda 表达式结果 执行表达式并返回结果
with this Lambda 表达式结果 同 run,但是函数调用形式
apply this 接收对象本身 初始化对象属性
also it 接收对象本身 做副作用处理,如日志打印

经典使用场景

1. let ------ Null 安全调用

java 复制代码
val name: String? = "Alice"

val upperCaseName = name?.let {
    println("用户名是:${it.uppercase()}")
    it.uppercase()
}

接收it,返回Lambda 表达式结果

经典场景:Null 安全处理、链式转换

2. run ------ 执行块并返回结果(局部作用域执行)

java 复制代码
val result = "Kotlin".run {
    println("字符串长度:$length")
    length * 2
}

接收this,返回Lambda 表达式结果
经典场景:执行并返回表达式结果

3. with ------ 对已有对象进行多次操作

java 复制代码
val builder = StringBuilder()

val result = with(builder) {
    append("Hello, ")
    append("world!")
    toString()
}

接收this,返回Lambda 表达式结果

经典场景:对已有对象连续操作

4. apply ------ 初始化对象属性(配置对象)

java 复制代码
val paint = Paint().apply {
    color = Color.RED
    strokeWidth = 5f
    style = Paint.Style.FILL
}

接收this,返回接收对象本身

经典场景:初始化对象属性(构建对象)

5. also ------ 添加副作用处理而不影响主流程

java 复制代码
val list = mutableListOf("A", "B", "C")
    .also { println("初始列表:$it") }
    .apply { add("D") }

接收it,返回接收对象本身

经典场景:插入副作用逻辑(日志/调试)

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui