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

Kotlin关键字`when`的详细用法

Kotlin关键字when的详细用法

在Kotlin中,when是一个强大的控制流语句,相当于其他语言中的switch语句,但更加强大且灵活。本文将详细讲解when的用法及其常见场景,并与Java的switch语句进行对比。

一、基本语法

基本的when语法如下:

val number = 3
when (number) {
    1 -> println("One")
    2 -> println("Two")
    3 -> println("Three")
    else -> println("Unknown")
}

二、匹配多个条件

可以使用逗号,分隔多个匹配条件:

val day = "Saturday"
when (day) {
    "Saturday", "Sunday" -> println("Weekend")
    else -> println("Weekday")
}

三、范围检查

使用in关键字可以判断一个值是否在一个范围或集合内:

val score = 85
when (score) {
    in 90..100 -> println("Excellent")
    in 75..89 -> println("Good")
    in 60..74 -> println("Pass")
    else -> println("Fail")
}

四、类型检查

when还可以用于类型检查,相当于Java中的instanceof

val obj: Any = "Hello Kotlin"
when (obj) {
    is String -> println("It's a String")
    is Int -> println("It's an Integer")
    else -> println("Unknown type")
}

五、不带参数的when

when也可以不带参数,这时可以用作更灵活的条件语句:

val number = 15
when {
    number % 3 == 0 && number % 5 == 0 -> println("FizzBuzz")
    number % 3 == 0 -> println("Fizz")
    number % 5 == 0 -> println("Buzz")
    else -> println(number)
}

六、作为表达式使用

Kotlin的when还可以直接作为表达式返回一个值:

val score = 78
val result = when (score) {
    in 90..100 -> "A"
    in 80..89 -> "B"
    in 70..79 -> "C"
    else -> "D"
}
println("Grade: $result")

七、与Java的switch语句对比

与Java的switch相比,Kotlin的when更加灵活强大:

  • Java的switch仅支持基本类型(如int、byte、short、char)、它们的包装类、枚举类型和String类型。
  • Kotlin的when支持任意类型的表达式,包括范围检查、类型检查、集合检查等更高级的特性。
  • Kotlin的when可以作为表达式直接返回值,而Java的switch语句在Java 14之前无法做到。

八、注意事项

  • when表达式必须是详尽的,或者必须包含else分支。
  • 在使用类型检查时,编译器会自动进行智能类型转换。

九、总结

Kotlin的when关键字通过更简洁的语法和强大的功能,极大提升了代码的可读性和可维护性。合理使用when可以让代码更优雅、更清晰。

希望本文能够帮助你更好地理解并掌握when的用法,提升你的Kotlin编程技能。

参考链接

  • Kotlin官方文档 - When表达式
  • Java官方文档 - Switch语句
  • Kotlin官方文档 - 控制流

在这里插入图片描述


http://www.kler.cn/a/585480.html

相关文章:

  • NLP技术介绍
  • SpringBoot + ResponseBodyEmitter 实时异步流式推送,优雅!
  • FreeRTOS之信号量
  • GaussDB高安全—全密态数据库
  • Git常用操作之GitLab
  • 【MySQL】第十八弹---数据库管理基础:视图操作与用户权限管理指南
  • 芯谷D8563TS实时时钟/日历芯片详解可替代PCF8563
  • 【Java 基础(人话版)】进制转换
  • 爬虫基础之爬取豆瓣同城信息(保存为csv excel 数据库)
  • 【计算机网络】第八版和第七版的主要区别,附PDF
  • Chatbox通过百炼调用DeepSeek
  • Qt项目中集成第三方模块的.pri文件
  • hadoop集群配置-ssh无密登陆
  • 数据结构-栈(详解)
  • 【瞎折腾/Dify】使用docker离线部署Dify
  • Unity中解锁图片像素点,动态闭合轨迹检测
  • 【2025】基于python+django的慢性病健康管理系统(源码、万字文档、图文修改、调试答疑)
  • LeeCode题库第643题
  • [目标检测] 训练之前要做什么
  • 【深度学习|目标检测】YOLO系列anchor-based原理详解