Control Flow
When Expression
Match a value with when.
branch
`when` checks cases in order and returns the matching branch value.
When Expression
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")
}
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
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
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
daystarts as2.- The
1case does not match. - The
6, 7weekend case does not match. - The
elsecase runs. labelbecomesweekday, so the script printsday=2andlabel=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.