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
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 →Verwandte Snippets
Nach mehreren Kriterien sortieren – sortedWith, compareBy und thenBy
Erst nach Priorität, dann nach Datum, und die ohne Termin ganz nach hinten: Solche Sortierungen werden mit einem handgeschriebenen Comparator schnell unleserlich. Kotlin hat dafür eine Baukastenschreibweise.
Room-Migrationen – das Schema ändern, ohne Nutzerdaten zu verlieren
Eine neue Spalte in der Entity, und beim nächsten Start ist der Spielstand weg – weil fallbackToDestructiveMigration die Datenbank einfach löscht. So machst du es richtig, inklusive Test.
Fehler in Coroutinen – coroutineScope, supervisorScope und wer wen mitreißt
Eine von fünf parallelen Abfragen scheitert – und plötzlich sind alle abgebrochen. Das ist kein Bug, sondern strukturierte Nebenläufigkeit. Wer den Unterschied zwischen coroutineScope und supervisorScope kennt, steuert das bewusst.