当前位置: 首页 > news >正文

Kotlin 中的作用域函数

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

作用域函数的对比:

作用域函数

1 let

特点:

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

示例:

val name: String? = "Kotlin"
val length = name?.let {println("非空时执行:$it") // 输出:非空时执行:Kotlinit.length
} ?: 0
println(length) // 输出:6val result = listOf(1, 2, 3).map { it * 2 }.let { it.joinToString("-") }
println(result) // 输出:2-4-6

2 run

特点:

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

示例:

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, 年龄: 39val nullableUser: User? = User("Bob", 30)
val message = nullableUser?.run {"用户: $name"
} ?: "用户不存在"
println(message) // 用户: Bob

3 with

特点:

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

示例:

val numbers = mutableListOf(1, 2, 3)val sum = with(numbers) {add(4)sum()
}println(sum) // 10

4 apply

特点:

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

示例:

// Android 中初始化 TextView
val textView = TextView(this).apply {text = "Hello"textSize = 16fsetTextColor(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 访问对象,需显式使用;
  • 返回值是对象本身;
  • 核心场景:附加操作(如日志、验证),不影响对象本身;

示例:

val list = mutableListOf(1, 2, 3).also {println("列表初始化完成 $it")it.add(4) // 附加操作
}println(list)// 链式调用中插入日志
val file = File("data.txt").also { println("文件路径: ${it.path}") }.readText()

相关文章:

  • 配置Hadoop集群-上传文件
  • 基于Java和PostGIS的AOI面数据球面面积计算实践
  • 【SpringBoot】从零开始全面解析Spring MVC (一)
  • Ascend的aclgraph(六)AclConcreteGraph
  • [经验总结]删除gitlab仓库分支报错:错误:无法推送一些引用到“http:”
  • c语言第一个小游戏:贪吃蛇小游戏06
  • Visual Studio 项目 .gitignore 文件指南
  • 在 Qt Creator 中为 QDockWidget 设置隐藏和显示按钮
  • 通过anaconda安装jupyter
  • 【Redis 进阶】缓存
  • Mac显卡的工作原理及特殊之处
  • 【 Redis | 实战篇 秒杀实现 】
  • 移动端(手机)ECharts 的myChart.on(‘click‘,还生效吗我怎么触发不了,没得鼠标触发不了点击事件
  • Qt事件循环机制
  • 光谱相机的光电信号转换
  • lubuntu 系统详解
  • 【FMMT】基于模糊多模态变压器模型的个性化情感分析
  • 访问层架构设计:第二篇
  • 大模型中的KV Cache
  • 思迈特软件携手天阳科技,打造ChatBI金融智能分析新标杆
  • 阿尔巴尼亚执政党连续第四次赢得议会选举,反对党此前雇用特朗普竞选经理
  • 上海北外滩,未来五年将如何“长个子”“壮筋骨”?
  • 回望乡土:对媒介化社会的反思
  • 英国首相斯塔默一处房产发生火灾
  • 西甲上海足球学院揭幕,用“足球方法论”试水中国青训
  • 国家统计局:4月份居民消费价格同比下降0.1%