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

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) // 自动转为String
    is Int -> println(obj.plus(1))   // 自动转为Int
    else -> 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.dtcms.com/a/94206.html

相关文章:

  • Redis的深入了解
  • 页面类buttons权限的简单控制
  • MySQL学习日志--多表查询篇
  • NDK CMake工程中引入其他C++三方库
  • 视频格式转换:畅享多平台无缝视频体验
  • 31天Python入门——第16天:模块与库详解
  • StarRocks语句解析json字符串的方法
  • 还刷刷刷刷刷
  • 洛谷1044栈C语言
  • 2025Java面试TOP1000问:源码级解答+避坑指南+性能优化
  • [C++][STL]unordered_set类和unordered_map类
  • 【MySQL】从零开始:掌握MySQL数据库的核心概念(五)
  • columns实现瀑布流布局
  • ⑦(ACG-网络配置)
  • 06 单目标定-去畸变
  • React Native与原生Android数据传递
  • 【Unity】 鼠标拖动物体移动速度跟不上鼠标,会掉落
  • 学习《JS数据结构与算法》
  • 同步整流和异步整流区别及其各优点
  • vm虚拟机 Ubuntu ping失败情况解决方法
  • Python的迭代器(Iterator)介绍以及实现多次使用
  • SVTAV1热点函数-svt_ext_all_sad_calculation_8x8_16x16_avx2
  • pip 安装某个包之后,Jupyter Lab仍旧显示包冲突;例如:Numba needs NumPy 2.1 or less. Got NumPy 2.2.
  • 热血传奇2超高清重置UI素材
  • Java并发编程
  • SAP-ABAP:OData 协议深度解析:架构、实践与最佳应用
  • 重学Java基础篇—什么是快速失败(fail-fast)和安全失败(fail-safe)?
  • 【Pandas】pandas Series to_xarray
  • 类和对象—继承(1)
  • 什么是真理?以及人工智能对真理标准的挑战