Match a value with when.

branch `when` checks cases in order and returns the matching branch value.

When Expression

day
WhenExpression.kt
Replay: real traced execution (multi-file project)
fun main() {
    val day = 2
    val label = when (day) {
        1 -> "start"
        6, 7 -> "weekend"
        else -> "weekday"
    }

    println("day=$day")
    println("label=$label")
}
fun main() {
    val day = 1
    val label = when (day) {
        1 -> "start"
        6, 7 -> "weekend"
        else -> "weekday"
    }

    println("day=$day")
    println("label=$label")
}
fun main() {
    val day = 6
    val label = when (day) {
        1 -> "start"
        6, 7 -> "weekend"
        else -> "weekday"
    }

    println("day=$day")
    println("label=$label")
}
  1. day ← 2, label ← weekday

    1fun main() {2    val day→ 2 = 2 //@day=1, 63    val label→ weekday = when (day2) {4        1 -> "start"5        6, 7 -> "weekend"6        else -> "weekday"7    }89    println("day=$day2")10    println("label=$labelweekday")11}
    outputday=2
    label=weekday
  1. day ← 1, label ← start

    1fun main() {2    val day→ 1 = 13    val label→ start = when (day1) {4        1 -> "start"5        6, 7 -> "weekend"6        else -> "weekday"7    }89    println("day=$day1")10    println("label=$labelstart")11}
    outputday=1
    label=start
  1. day ← 6, label ← weekend

    1fun main() {2    val day→ 6 = 63    val label→ weekend = when (day6) {4        1 -> "start"5        6, 7 -> "weekend"6        else -> "weekday"7    }89    println("day=$day6")10    println("label=$labelweekend")11}
    outputday=6
    label=weekend

Follow the Cases

  1. day starts as 2.
  2. The 1 case does not match.
  3. The 6, 7 weekend case does not match.
  4. The else case runs.
  5. label becomes weekday, so the script prints day=2 and label=weekday. | day | matching case | label | | --- | --- | --- | | 2 | else | weekday | | 1 | 1 | start | | 6 | 6, 7 | weekend |

Exercise: WhenExpression.kt

Reproduce day=2 and label=weekday, then use the pinned day variants 1 and 6 to predict label=start and label=weekend.