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

5.Kotlin作用于函数let、run、with、apply、also

选择建议

  1. 需要返回值:使用 letrunwith
  2. 配置对象:使用 apply
  3. 附加操作:使用 also
  4. 非空检查:使用 let
  5. 链式调用:使用 letrun

Kotlin作用域函数详解

概述

Kotlin提供了5个作用域函数:letrunwithapplyalso。它们都用于在对象的上下文中执行代码块,但有不同的特点和使用场景。

详细对比

1. let - 非空检查和转换

// 基本语法
fun <T, R> T.let(block: (T) -> R): R// 使用场景
val name: String? = "Kotlin"
val length = name?.let { println("Name is: $it")it.length 
} ?: 0// 链式调用
val result = "Hello".let { it.uppercase() }.let { "$it World" }

特点:

  • 返回lambda表达式的结果
  • 常用于非空检查
  • it 是对象引用
  • 适合链式调用

2. run - 对象配置和计算

// 基本语法
fun <T, R> T.run(block: T.() -> R): R// 使用场景
val result = "Hello".run {println("Length: $length")uppercase()
}// 对象配置
val person = Person().run {name = "John"age = 25this
}

特点:

  • 返回lambda表达式的结果
  • this 是对象引用
  • 适合对象配置和计算
  • 可以访问对象的属性和方法

3. with - 对象操作

// 基本语法
fun <T, R> with(receiver: T, block: T.() -> R): R// 使用场景
val person = Person("John", 25)
val description = with(person) {println("Name: $name")println("Age: $age")"$name is $age years old"
}

特点:

  • 不是扩展函数
  • this 是对象引用
  • 适合对对象进行多个操作
  • 返回lambda表达式的结果

4. apply - 对象配置

// 基本语法
fun <T> T.apply(block: T.() -> Unit): T// 使用场景
val person = Person().apply {name = "John"age = 25address = "New York"
}// 集合配置
val list = mutableListOf<String>().apply {add("Item 1")add("Item 2")add("Item 3")
}

特点:

  • 返回对象本身
  • this 是对象引用
  • 适合对象配置
  • 常用于构建器模式

5. also - 附加操作

// 基本语法
fun <T> T.also(block: (T) -> Unit): T// 使用场景
val numbers = mutableListOf(1, 2, 3)
numbers.also {println("List before adding: $it")
}.add(4)// 日志记录
val result = calculateSomething().also {println("Calculation result: $it")
}

特点:

  • 返回对象本身
  • it 是对象引用
  • 适合附加操作(如日志、验证)
  • 不影响主流程

使用场景总结

函数返回类型对象引用主要用途
letlambda结果it非空检查、转换、链式调用
runlambda结果this对象配置、计算
withlambda结果this对象操作、多个操作
apply对象本身this对象配置、构建器模式
also对象本身it附加操作、日志记录

实际应用示例

// 用户注册流程
val user = User().apply {name = "John"email = "john@example.com"password = "password123"
}.also {println("User created: $it")
}.let { user ->if (user.email.isValid()) {userService.register(user)} else {throw IllegalArgumentException("Invalid email")}
}

总结

这些作用域函数让Kotlin代码更加简洁和表达性强,选择合适的作用域函数可以让代码更易读和维护。根据具体的使用场景和需求,选择最合适的作用域函数可以显著提升代码质量。

http://www.dtcms.com/a/341545.html

相关文章:

  • SpringCloud微服务架构入门指南
  • Day12--滑动窗口与双指针--2762. 不间断子数组,LCP 68. 美观的花束,2743. 计算没有重复字符的子字符串数量
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • Unity 开源分享一个轻量路点编辑器插件 常用于对象寻路
  • 在IDEA中DEBUG调试时查看MyBatis-Plus动态生成的SQL语句
  • 数据结构:AVL 树
  • RHCA05-文件系统调优
  • Spark学习
  • 游戏本不插电源适配器不卡设置教程
  • 技术半衰期悖论:AI时代“不可替代领域“的深耕地图
  • 30.Linux cobbler自动化部署
  • 生物信息学深度学习模型比较与学习框架
  • chrome插件开发(一)
  • 23TaskExecutor初始化
  • Windows 命令行:dir 命令
  • MyBatis 动态查询语句详解:让 SQL 更灵活可控
  • 前端调用阿里云接口语音合成演示
  • 20人团队文件共享选哪款?群晖DS925+ 和 DS1525+深度对比
  • 反射基础知识初入(up晚上回家再补完剩下的)
  • Anomalib:在Linux服务器上安装使用Anomalib 2.1.0
  • 生意参谋-市场竞争分析-提升商品成长效率
  • PostgreSQL 中的金钱计算处理
  • C语言第十章内存函数
  • 《SQLAlchemy 2 In Practice》读后感
  • win与ubuntu双系统安装笔记
  • 小波函数多尺度变换的 Curvelet 变换
  • vue3项目,使用vue2方式来写,可以吗
  • 【嵌入式】CAN通信
  • 基于XGBoost算法的数据回归预测 极限梯度提升算法 XGBoost
  • 虚拟机部署HDFS集群