Kotlin 中的作用域函数

在 Kotlin 中,作用域函数是一组用于在对象上下文中执行代码块的函数。 它们通过简洁的语法实现对对象的操作和逻辑封装。

作用域函数的对比:

1 let

特点:

  • 通过 it 访问对象,需显式使用;
  • 返回值是代码块的最后一行结果;
  • 核心场景:空安全检查和数据转换;

示例:

kotlin 复制代码
val name: String? = "Kotlin"
val length = name?.let {
    println("非空时执行:$it") // 输出:非空时执行:Kotlin
    it.length
} ?: 0
println(length) // 输出:6

val result = listOf(1, 2, 3)
    .map { it * 2 }
    .let { it.joinToString("-") }
println(result) // 输出:2-4-6

2 run

特点:

  • 通过 this 访问对象,可省略;
  • 返回代码块的最后一行结果;
  • 核心场景:对象操作并返回结果,或替代 let 简化代码;

示例:

kotlin 复制代码
data class User(var name: String, var age: Int)

val user = User("Eileen", 34)
val info = user.run {
    age += 5
    "姓名: $name, 年龄: $age"
}
println(info) // 姓名: Eileen, 年龄: 39

val nullableUser: User? = User("Bob", 30)
val message = nullableUser?.run {
    "用户: $name"
} ?: "用户不存在"
println(message) // 用户: Bob

3 with

特点:

  • 非扩展函数,直接传入对象:with(obj) {...}
  • 通过 this 访问对象,可省略;
  • 返回值是代码块的最后一行结果;
  • 核心场景:批量操作对象,无需重复写对象名;

示例:

kotlin 复制代码
val numbers = mutableListOf(1, 2, 3)

val sum = with(numbers) {
    add(4)
    sum()
}

println(sum) // 10

4 apply

特点:

  • 通过 this 访问对象,可省略;
  • 返回值是对象本身;
  • 核心场景:对象初始化或链式配置属性;

示例:

kotlin 复制代码
// Android 中初始化 TextView
val textView = TextView(this).apply {
    text = "Hello"
    textSize = 16f
    setTextColor(Color.BLACK)
}

// 数据类配置
data class Config(var host: String = "", var port: Int = 0)
val config = Config().apply {
    host = "127.0.0.1"
    port = 8080
}

5 also

特点:

  • 通过 it 访问对象,需显式使用;
  • 返回值是对象本身;
  • 核心场景:附加操作(如日志、验证),不影响对象本身;

示例:

kotlin 复制代码
val list = mutableListOf(1, 2, 3).also {
    println("列表初始化完成 $it")
    it.add(4) // 附加操作
}

println(list)

// 链式调用中插入日志
val file = File("data.txt")
    .also { println("文件路径: ${it.path}") }
    .readText()
相关推荐
cen__y43 分钟前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人1 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生2 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS2 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣2 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Android小码家2 小时前
Framework之Launcher小窗开发
android·framework·虚拟屏·小窗
Xin_ye100862 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
赏金术士2 小时前
第七章:状态管理实战与架构总结
android·ui·kotlin·compose
AI科技星3 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi