# 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)。