原文: http://zetcode.com/kotlin/when/

Kotlin when表达式教程展示了如何在 Kotlin 中使用when表达式。 when表达式替换了 C 语言族中已知的switch语句。

Kotlin 是在 Java 虚拟机上运行的静态类型的编程语言。

Kotlin 在将其参数依次与所有分支匹配之前,直到满足某个分支条件为止。 它既可以用作表达式也可以用作语句。 如果将其用作表达式,则满足的分支的值将成为整个表达式的值。

Kotlin 的简单例子

以下是一个简单的示例,该示例使用带有星期几的when表达式。

day_of_week.kt

  1. package com.zetcode
  2. fun main() {
  3. val dayOfWeek = 3
  4. when (dayOfWeek) {
  5. 1 -> println("monday")
  6. 2 -> println("tuesday")
  7. 3 -> println("wednesday")
  8. 4 -> println("thursday")
  9. 5 -> println("friday")
  10. 6 -> println("saturday")
  11. 7 -> println("sunday")
  12. else -> println("invalid day")
  13. }
  14. }

在该示例中,我们基于整数值打印星期几。 依次测试七个不同的分支。 如果满足其中之一,则其余的将被跳过。 如果都不满足,则执行else分支。

Kotlin when将值分组

可以使用逗号运算符在分支中将值分组。

day_of_week2.kt

  1. package com.zetcode
  2. fun main() {
  3. val dayOfWeek = 5
  4. when (dayOfWeek){
  5. 1,2,3,4,5 -> println("weekday")
  6. 6,7 -> println("weekend")
  7. else -> println("wrong value")
  8. }
  9. }

在示例中,我们将值分组以形成两个分支:工作日和周末。

Kotlin when表达式示例

Kotlin when可以用作表达式。 返回满意分支的值。

when_expression.kt

  1. package com.zetcode
  2. import java.time.DayOfWeek
  3. import java.time.LocalDate
  4. fun main() {
  5. val dayOfWeek: DayOfWeek = LocalDate.now().dayOfWeek
  6. val msg:String = when (dayOfWeek) {
  7. DayOfWeek.MONDAY -> "It is monday"
  8. DayOfWeek.TUESDAY -> "It is tuesday"
  9. DayOfWeek.WEDNESDAY -> "It is tuesday"
  10. DayOfWeek.THURSDAY -> "It is tuesday"
  11. DayOfWeek.FRIDAY -> "It is tuesday"
  12. DayOfWeek.SATURDAY -> "It is tuesday"
  13. DayOfWeek.SUNDAY -> "It is tuesday"
  14. else -> "Invalid day of week"
  15. }
  16. println(msg)
  17. }

我们确定当前工作日。 来自匹配分支的字符串被分配给msg变量,该变量随后被打印到控制台。

Kotlin when范围

我们可以在when分支中测试值的范围。 (这也可以通过集合来完成。)

age_groups.kt

  1. package com.zetcode
  2. fun main() {
  3. val age = 40
  4. when (age) {
  5. in 0..14 -> println("children")
  6. in 15..24 -> println("youth")
  7. in 25..64 -> println("adults")
  8. in 65..120 -> println("seniors")
  9. in 120..130 -> println("unlikely age")
  10. else -> println("wrong age value")
  11. }
  12. }

我们有一个年龄变量。 我们使用 Kotlin 范围将值分配给年龄组。

Kotlin when枚举

Kotlin 表达式可与枚举一起使用时。

when_enums.kt

  1. package com.zetcode
  2. enum class Season {
  3. SPRING, SUMMER, AUTUMN, WINTER
  4. }
  5. fun main() {
  6. val season = Season.SUMMER
  7. when (season) {
  8. Season.SPRING -> println("It is spring")
  9. Season.SUMMER -> println("It is summer")
  10. Season.AUTUMN -> println("It is autumn")
  11. Season.WINTER -> println("It is winter")
  12. }
  13. }

我们有一个Season枚举。 我们将枚举作为when表达式的参数传递。

Kotlin when不带参数

Kotlin when可以不带参数使用表达式。

random_val.kt

  1. package com.zetcode
  2. import java.util.Random
  3. fun main() {
  4. val r:Int = Random().nextInt(10) - 5
  5. when {
  6. r < 0 -> println("negative value")
  7. r == 0 -> println("zero")
  8. r > 0 -> println("positive value")
  9. }
  10. }

在示例中,我们生成一个随机值。 我们使用when表达式测试该值,而不将其作为参数放在圆括号中。

Kotlin when类型

我们可以使用is运算符检查类型。

when_types.kt

  1. package com.zetcode
  2. import javax.lang.model.type.ArrayType
  3. fun main() {
  4. val variable: Any = 23
  5. when (variable) {
  6. is Int -> println("It is an integer")
  7. is String -> println("It is a string")
  8. is ArrayType -> println("It is an array")
  9. }
  10. }

在示例中,我们在when表达式中检查变量的类型。

在本教程中,我们介绍了 Kotlin 中的when表达式。 您可能也对相关教程感兴趣: Kotlin 控制流教程Kotlin 范围教程或列出所有 Kotlin 教程