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,返回接收对象本身

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

相关推荐
我命由我123454 分钟前
Android 开发问题:TextView 内容超过宽度时,默认不会换行
android·开发语言·java-ee·android studio·android jetpack·android-studio·android runtime
shandianchengzi1 小时前
【科普】安卓|安卓手机上如何简便实现Ctrl+Z(需要键盘或一台Windows电脑)
android·windows·智能手机·计算机外设·安卓·科普·记录
赏金术士9 小时前
Compose 教学项目
android·kotlin·compose
晓梦林9 小时前
ximai靶场学习笔记
android·笔记·学习
十六年开源服务商13 小时前
2026服务器配置优化与WordPress运维实战指南
android·运维·服务器
音视频牛哥15 小时前
大牛直播SDK(SmartMediaKit)Android平台Unity3D RTSP/RTMP播放器集成实践
android·unity3d·rtsp播放器·rtmp播放器·unity3d rtmp播放器·安卓unity rtsp播放器·安卓unity rtmp播放器
w1wi15 小时前
安卓抓包完全指南(一):从入门到 SSL Pinning 绕过
android·网络协议·ssl
aqi0017 小时前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony
赏金术士18 小时前
Jetpack Compose 状态提升(State Hoisting)完全指南
android·kotlin·compose