Kotlin when 表达式完全指南:从基础到高级的12种实战用法

掌握 when 的灵活运用,告别繁琐的 if-else 链
以下是 Kotlin 中 when 表达式的 12种核心用法 的全面总结,涵盖基础到高级场景,并附带实用示例:
一、基础用法
1. 替代 Java 的 switch-case

when (x) {1 -> println("一")2 -> println("二")else -> println("其他")
}

2. 多条件合并

when (x) {1, 2 -> println("一或二")in 3..5 -> println("三到五")else -> println("其他")
}

二、高级匹配
3. 类型检查(智能转换)

when (obj) {is String -> println(obj.length) // 自动转为Stringis Int -> println(obj.plus(1))   // 自动转为Intelse -> println("未知类型")
}

4. 范围匹配

when (score) {in 90..100 -> "A"in 80 until 90 -> "B"!in 60..79 -> "不及格" else -> "C"
}

5. 函数调用作为分支条件

when {x.isOdd() -> println("奇数")x.isEven() -> println("偶数")else -> println("非整数")
}

三、特殊场景
6. 无参数形式(布尔表达式链)

when {network.isConnected() -> fetchData()cache.isValid() -> showCachedData()else -> showError()
}

7. 枚举匹配

enum class Color { RED, GREEN, BLUE }when (color) {Color.RED -> println("红色")Color.GREEN -> println("绿色")Color.BLUE -> println("蓝色")
}

8. 解构声明

when (val (x, y) = point) {(0, 0) -> println("原点")(1, 1) -> println("对角线点")else -> println("其他坐标")
}

四、返回值特性
9. 作为表达式返回结果

val result = when (input) {"yes" -> "同意""no" -> "拒绝"else -> "无效输入"
}

10. 配合 let 处理可空变量

val message = nullableStr?.let { when (it.length) {0 -> "空字符串"in 1..10 -> "短文本"else -> "长文本"}
} ?: "变量为null"

五、实用技巧
11. 与 sealed class 配合(状态机)

sealed class Result {data class Success(val data: String) : Result()data class Error(val msg: String) : Result()
}when (result) {is Result.Success -> showData(result.data)is Result.Error -> showError(result.msg)
}

12. 替代 if-else 链

// 传统写法
if (x == 1) {// ...
} else if (x in 2..5) {// ...
} else {// ...
}// Kotlin 优雅写法
when (x) {1 -> { /* ... */ }in 2..5 -> { /* ... */ }else -> { /* ... */ }
}

六、注意事项
穷尽性检查:当作为表达式时,必须包含 else 分支(枚举或密封类除外)

执行顺序:按从上到下匹配,首个满足条件的分支执行后即退出

性能优化:编译器会将密集的整型匹配优化为 跳转表

掌握这些用法后,when 可以替代绝大多数条件判断场景,使代码更简洁安全。建议在 Android 开发中优先使用 when 替代复杂的 if-else 嵌套。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新加坡 PSB 认证:安全标准、证书特点及申请注意事项

目录 什么是PSB认证? 涉及产品范围 强制性认证产品类别 自愿性认证产品 认证项目与测试标准 1. 安全测试 2. 电磁兼容性(EMC)测试 3. 能效测试(特定产品) 认证流程详解 第一步:准备阶段 第二步&a…

UE4学习笔记 FPS游戏制作26 UE中的UI

文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式函数绑定属性绑定事件绑定 九宫格分割图片 几个概念 UMG:UE的UI编辑器 slate UI: UE的UI的编辑语言 创建一个UI蓝图 右键用…

HttpRunner v4.x 远程调用实践指南

一、基于 SSH 的远程执行方案 1. 环境准备流程 在目标服务器部署 HttpRunner 运行时环境: # 远程服务器执行(需 Golang 1.18 和 Python 3.8) curl -ksSL https://httprunner.com/script/install.sh | bash配置免密登录(本地机器…

头条项目的文章延迟发布功能

最近做的头条项目其中有个功能是创作者发表的文章可以设置在未来某个时间发表,在实现这个功能的时候就在想该怎么实现呢?刚开始想的是利用Spring的定时任务定时的去数据库中查询,可以这个查询频率该怎么设置,每次从数据库中需要查…

Celery 全面指南:Python 分布式任务队列详解

Celery 全面指南:Python 分布式任务队列详解 Celery 是一个强大的分布式任务队列/异步任务队列系统,基于分布式消息传递,专注于实时处理,同时也支持任务调度。本文将全面介绍 Celery 的核心功能、应用场景,并通过丰富…

OpenHarmony NativeC++应用开发speexdsp噪声消除案例

随着5.0的版本的迭代升级,笔者感受到了开源鸿蒙前所未有大的版本更替速度。5.0出现了越来越多的C API可以调用,极大的方便了native c应用的开发。笔者先将speexdsp噪声消除的案例分享,老规矩,还是开源!!&am…

nuxt3 seo优化

在 Nuxt3 中,通过 nuxtjs/seo、nuxtjs/sitemap 和 nuxtjs/robots 模块可以生成包含动态链接的站点地图(sitemap.xml),但具体是“实时生成”还是“部署时生成”,取决于你的配置方式和数据更新频率。以下是具体分析&…

es6的100个问题

基础概念 解释 let、const 和 var 的区别。什么是块级作用域?ES6 如何实现它?箭头函数和普通函数的主要区别是什么?解释模板字符串(Template Literals)的用途,并举例嵌套变量的写法。解构赋值的语法是什么…

【机器学习】什么是决策树?

什么是决策树? 决策树是一种用于分类和回归问题的模型。它通过一系列的“决策”将数据逐步分裂,最终得出预测结果。可以把它看作是一个“树”,每个节点表示一个特征的判断,而每个分支代表了可能的判断结果,最终的叶子…

Java面试黄金宝典15

1. 请找出增序排列中一个数字第一次和最后一次出现的数组下标 定义 由于数组是增序排列的,我们可以利用二分查找的特性来高效地定位目标数字。对于查找第一次出现的位置,当中间元素等于目标数字时,我们需要继续向左搜索,以确保找…

CentOS 7安装 mysql

CentOS 7安装 mysql 1. yum 安装 mysql 配置mysql源 yum -y install mysql57-community-release-el7-10.noarch.rpm安装MySQL服务器 yum -y install mysql-community-server启动MySQL systemctl start mysqld.service查看MySQL运行状态,运行状态如图&#xff…

科软25机试

题目: 2025科软复试上机题&#xff08;回忆版&#xff09;题解_哔哩哔哩_bilibili 1. 字符串反转 #include<bits/stdc.h> using namespace std;void solve(string& a, int CurN) {if (!(CurN % 2)) {int right a.size() - 1;int left 0;while (left < right)…

Oracle相关的面试题

以下是150道Oracle相关的面试题&#xff0c;涵盖了Oracle的基础概念、架构、SQL与PL/SQL、性能调优、高可用性、备份与恢复、安全、分区与索引、存储与内存管理、网络与连接、版本与升级等方面&#xff0c;希望对你有所帮助。 Oracle基础概念 1. 什么是Oracle数据库&#xff1…

docker安装,镜像,常用命令,Docker容器卷,Docker应用部署,自定义镜像,Docker服务编排,创建私有仓库

1.为什么使用docker 如果开发环境和测试环境的允许软件版本不一致&#xff0c;可能会导致项目无法正常启动 把环境和项目一起打包发送给测试环境 1.1docker的概念 开源的应用容器引擎&#xff0c;完全使用沙箱机制&#xff0c;相互隔离&#xff0c;容器性能开销极低 一种容…

ES 字段的映射定义了字段的类型及其行为

在 Elasticsearch 中&#xff0c;字段的映射定义了字段的类型及其行为。你提供的 content_answer 字段映射如下&#xff1a; Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …

Manus的开源替代者之一:OpenManus通用AI智能体框架解析及产品试用

引言 在AI智能体领域&#xff0c;Monica团队近期发布的Manus被誉为全球首个通用型AI智能体。该项目推出后迅速爆红&#xff0c;邀请码一号难求&#xff0c;随之而来的是各路开发者快速构建了众多类似的开源替代方案。其中&#xff0c;MetaGPT团队的5位工程师仅用3小时就开发完…

Linux MariaDB部署

1&#xff1a;查看Linux系统版本 cat /etc/os-release#返回结果&#xff1a; NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI…

PHP MySQL 预处理语句

PHP MySQL 预处理语句 引言 在PHP中与MySQL数据库进行交互时,预处理语句是一种非常安全和高效的方法。预处理语句不仅可以防止SQL注入攻击,还可以提高数据库查询的效率。本文将详细介绍PHP中预处理语句的用法,包括其基本概念、语法、优势以及在实际开发中的应用。 预处理…

算法 | 2024最新算法:鳑鲏鱼优化算法原理,公式,应用,算法改进研究综述,matlab代码

2024最新鳑鲏鱼优化算法(BFO)研究综述 鳑鲏鱼优化算法(Bitterling Fish Optimization, BFO)是2024年提出的一种新型群智能优化算法,受鳑鲏鱼独特的繁殖行为启发,通过模拟其交配、产卵和竞争机制进行全局优化。该算法在多个领域展现出优越性能,尤其在解决复杂非线性问题中…

HDR(HDR10/ HLG),SDR

以下是HDR&#xff08;HDR10/HLG&#xff09;和SDR的详细解释&#xff1a; 1. SDR&#xff08;Standard Dynamic Range&#xff0c;标准动态范围&#xff09; • 定义&#xff1a;SDR是传统的动态范围标准&#xff0c;主要用于8位色深的视频显示&#xff0c;动态范围较窄&…