💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Kotlin `when`表达式 > 原文: [http://zetcode.com/kotlin/when/](http://zetcode.com/kotlin/when/) Kotlin `when`表达式教程展示了如何在 Kotlin 中使用`when`表达式。 `when`表达式替换了 C 语言族中已知的`switch`语句。 Kotlin 是在 Java 虚拟机上运行的静态类型的编程语言。 Kotlin 在将其参数依次与所有分支匹配之前,直到满足某个分支条件为止。 它既可以用作表达式也可以用作语句。 如果将其用作表达式,则满足的分支的值将成为整个表达式的值。 ## Kotlin 的简单例子 以下是一个简单的示例,该示例使用带有星期几的`when`表达式。 `day_of_week.kt` ```kt package com.zetcode fun main() { val dayOfWeek = 3 when (dayOfWeek) { 1 -> println("monday") 2 -> println("tuesday") 3 -> println("wednesday") 4 -> println("thursday") 5 -> println("friday") 6 -> println("saturday") 7 -> println("sunday") else -> println("invalid day") } } ``` 在该示例中,我们基于整数值打印星期几。 依次测试七个不同的分支。 如果满足其中之一,则其余的将被跳过。 如果都不满足,则执行`else`分支。 ## Kotlin `when`将值分组 可以使用逗号运算符在分支中将值分组。 `day_of_week2.kt` ```kt package com.zetcode fun main() { val dayOfWeek = 5 when (dayOfWeek){ 1,2,3,4,5 -> println("weekday") 6,7 -> println("weekend") else -> println("wrong value") } } ``` 在示例中,我们将值分组以形成两个分支:工作日和周末。 ## Kotlin `when`表达式示例 Kotlin `when`可以用作表达式。 返回满意分支的值。 `when_expression.kt` ```kt package com.zetcode import java.time.DayOfWeek import java.time.LocalDate fun main() { val dayOfWeek: DayOfWeek = LocalDate.now().dayOfWeek val msg:String = when (dayOfWeek) { DayOfWeek.MONDAY -> "It is monday" DayOfWeek.TUESDAY -> "It is tuesday" DayOfWeek.WEDNESDAY -> "It is tuesday" DayOfWeek.THURSDAY -> "It is tuesday" DayOfWeek.FRIDAY -> "It is tuesday" DayOfWeek.SATURDAY -> "It is tuesday" DayOfWeek.SUNDAY -> "It is tuesday" else -> "Invalid day of week" } println(msg) } ``` 我们确定当前工作日。 来自匹配分支的字符串被分配给`msg`变量,该变量随后被打印到控制台。 ## Kotlin `when`范围 我们可以在`when`分支中测试值的范围。 (这也可以通过集合来完成。) `age_groups.kt` ```kt package com.zetcode fun main() { val age = 40 when (age) { in 0..14 -> println("children") in 15..24 -> println("youth") in 25..64 -> println("adults") in 65..120 -> println("seniors") in 120..130 -> println("unlikely age") else -> println("wrong age value") } } ``` 我们有一个年龄变量。 我们使用 Kotlin 范围将值分配给年龄组。 ## Kotlin `when`枚举 Kotlin 表达式可与枚举一起使用时。 `when_enums.kt` ```kt package com.zetcode enum class Season { SPRING, SUMMER, AUTUMN, WINTER } fun main() { val season = Season.SUMMER when (season) { Season.SPRING -> println("It is spring") Season.SUMMER -> println("It is summer") Season.AUTUMN -> println("It is autumn") Season.WINTER -> println("It is winter") } } ``` 我们有一个`Season`枚举。 我们将枚举作为`when`表达式的参数传递。 ## Kotlin `when`不带参数 Kotlin `when`可以不带参数使用表达式。 `random_val.kt` ```kt package com.zetcode import java.util.Random fun main() { val r:Int = Random().nextInt(10) - 5 when { r < 0 -> println("negative value") r == 0 -> println("zero") r > 0 -> println("positive value") } } ``` 在示例中,我们生成一个随机值。 我们使用`when`表达式测试该值,而不将其作为参数放在圆括号中。 ## Kotlin `when`类型 我们可以使用`is`运算符检查类型。 `when_types.kt` ```kt package com.zetcode import javax.lang.model.type.ArrayType fun main() { val variable: Any = 23 when (variable) { is Int -> println("It is an integer") is String -> println("It is a string") is ArrayType -> println("It is an array") } } ``` 在示例中,我们在`when`表达式中检查变量的类型。 在本教程中,我们介绍了 Kotlin 中的`when`表达式。 您可能也对相关教程感兴趣: [Kotlin 控制流教程](/kotlin/controlflow/), [Kotlin 范围教程](/kotlin/ranges/)或列出[所有 Kotlin 教程](/all/#kotlin)。