MWCodebymw.de ↗
Kotlin

when in Kotlin – mehr als ein switch

when ersetzt das switch aus Java, kann aber viel mehr: es liefert einen Wert zurück, prüft Bereiche und Mengen, arbeitet ohne Argument wie eine if-Kette und erzwingt bei sealed-Typen Vollständigkeit. Ich zeige dir alle vier Varianten.

when ist Kotlins Antwort auf switch – aber deutlich mächtiger. Ich nutze es täglich, und meistens als Ausdruck, der direkt einen Wert liefert.

Als Ausdruck – gibt einen Wert zurück

val note = when (punkte) {
    in 90..100 -> "sehr gut"
    in 70..89  -> "gut"
    in 50..69  -> "okay"
    else       -> "durchgefallen"
}

Zwei Dinge auf einmal: when liefert ein Ergebnis (kein break, kein Zwischenspeichern), und die Zweige prüfen Bereiche mit in 90..100. Als Ausdruck ist else Pflicht, damit immer ein Wert herauskommt.

Mengen und mehrere Werte pro Zweig

val typ = when (zeichen) {
    'a', 'e', 'i', 'o', 'u' -> "Vokal"
    in '0'..'9'             -> "Ziffer"
    else                    -> "sonstiges"
}

Ohne Argument – wie eine aufgeräumte if-Kette

Lässt du das Argument weg, prüft jeder Zweig eine beliebige Bedingung:

val status = when {
    saldo < 0      -> "im Minus"
    saldo == 0     -> "leer"
    saldo > 10_000 -> "gut gefüllt"
    else           -> "normal"
}

Das liest sich oft klarer als if / else if / else.

Mit sealed-Typen: Vollständigkeit erzwungen

Der stärkste Trick: Prüfst du einen sealed-Typ, weiß der Compiler alle möglichen Fälle – und verlangt, dass du sie abdeckst. Ergänzt du später eine neue Unterklasse, meckert der Compiler an genau der Stelle:

sealed interface Ladezustand
data object Laden : Ladezustand
data class Fertig(val daten: String) : Ladezustand
data class Fehler(val msg: String) : Ladezustand

fun anzeige(z: Ladezustand) = when (z) {
    Laden      -> "⏳"
    is Fertig  -> z.daten
    is Fehler  -> "⚠️ ${z.msg}"
    // kein else nötig – alle Fälle sind abgedeckt
}

Das macht Zustands-Logik sicher: Kein Fall wird vergessen, weil der Compiler mitzählt.

Wenn du eine Android-App in Kotlin planst und robusten, gut lesbaren Code willst, baue ich dir das – meld dich über bymw.de.

Quellen

#Kotlin#when#Kontrollfluss#sealed#Expression

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →