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

kotlin 常用函数

Kotlin 作用域函数详解:applylet等五大函数对比

Kotlin 提供了多个作用域函数(Scope Functions),它们都是在对象的上下文中执行代码块的扩展函数。最常用的五个是:letrunwithapplyalso。它们的主要区别在于:

  1. 1.

    引用对象的方式​(thisit

  2. 2.

    返回值类型​(返回上下文对象本身或返回 lambda 结果)

下面是详细对比和使用场景:

📊 五大作用域函数对比表

函数

上下文对象引用

返回值

是否扩展函数

典型使用场景

let

it

lambda 结果

非空检查、转换对象

run

this

lambda 结果

对象配置并计算结果

with

this

lambda 结果

对已有对象进行分组操作

apply

this

对象本身

对象初始化配置

also

it

对象本身

执行附加操作(日志、验证等)


🧩 详细解析与代码示例

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
}
http://www.dtcms.com/a/395748.html

相关文章:

  • 2025年CSP-J1入门级初赛题解
  • vue3的基本指令以及对js的导入和导出
  • Linux 基础:关机与重启
  • React Native:分享Windows平台搭建react native并构建apk的操作流程和配置信息
  • EC24026露营灯警示灯芯片方案 报警声语音IC 单片机方案开发
  • 反量化的详细过程
  • C语言:实现3x3矩阵对角线求和
  • [Maven 基础课程]Maven 工程继承和聚合
  • 数据库--存储过程
  • mysql默认事务隔离级别下并发读不到最新数据解决方案
  • M3U8通用下载器
  • Vue动态组件详细用法指南
  • C#练习题——委托练习
  • 【TS4】简单的typescript练手项目
  • 前端学习手册-JavaScript函数与回调(十一)
  • Unity小游戏接入抖音敏感词检测
  • 【2025最新】01 Spring Boot 第一个小程序 for VS Code - 通过 Spring Initializr 网站创建
  • 算法面试(3)------YOLO 的核心思想是什么?YOLOv1 到 v8 的演进路线?
  • docker 部署gitlib
  • SpringBoot3.5.5版本大坑
  • Lightroom Classic 2025专业级数字照片管理与后期处理全解析
  • 交叉编译工具链
  • 前端构建工具有哪些?常用前端构建工具推荐、前端构建工具对比与最佳实践
  • 【RocketMQ入门到精通 | 4】工作原理:indexFile索引文件
  • PPIO首发上线DeepSeek-V3.1-Terminus
  • 《嵌入式驱动(一):系统移植》
  • C语言(长期更新)第22讲:文件操作(一)
  • 财务管控——解读79页集团财务业务管控方法及信息化应用案例【附全文阅读】
  • 火语言RPA:解锁开发者工作流的“自动化密码”
  • 用户行为数据可视化