ZetCode

Kotlin when 表达式

最后修改于 2024 年 1 月 29 日

本文介绍了如何在 Kotlin 中使用 when 表达式。 when 表达式是 C 系列语言中 switch 语句的替代品。

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

Kotlin when 将其参数与所有分支按顺序进行匹配,直到满足某个分支条件。它既可以用作表达式,也可以用作语句。如果将其用作表达式,则已满足分支的值将成为整个表达式的值。

Kotlin when 简单示例

下面是一个简单的示例,它使用 when 表达式来处理星期几。

day_of_week.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
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
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
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 表达式可以与枚举一起使用。

when_enums.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
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
package com.zetcode 

fun main() {

    val data = listOf<Any>("sparrow", 12, true, intArrayOf(1, 2, 3), 12.1)

    data.forEach { e ->

        when (e) {
            is String -> println("$e is a string")
            is Int -> println("$e is an integer")
            is Boolean -> println("$e is a boolean")
            is IntArray-> println("[${e.joinToString()}] is an array of integers")
            is Double -> println("$e is a double")
            else -> println("$e is unknown")
        }
    }
}

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

来源

Kotlin 条件和循环

在本文中,我们介绍了 Kotlin 中的 when 表达式。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 Kotlin 教程