when Expression

Replacing switch

Example

when compares a value against branches. No break is needed, and several values can share a branch.

fun main() {
    val day = 6
    when (day) {
        1 -> println("Monday")
        2 -> println("Tuesday")
        3, 4, 5 -> println("Midweek")
        6, 7 -> println("Weekend")
        else -> println("Invalid day")
    }
}

Output

Weekend

when as an Expression

Example

Like if, when can return a value. Then it must be exhaustive (usually an else branch).

fun main() {
    val statusCode = 404
    val message = when (statusCode) {
        200 -> "OK"
        201 -> "Created"
        401 -> "Please log in again"
        404 -> "Not found"
        500 -> "Server error, try later"
        else -> "Unknown status"
    }
    println("$statusCode: $message")
}

Output

404: Not found

when vs Java switch

Java switch (classic)Kotlin when
Fall-throughyes, needs breakno
Returns a valueonly switch expressions (Java 14+)yes
Ranges in 1..10noyes
Type checks is StringJava 21 patternsyes
Arbitrary conditionsnoyes (when without argument)