0Pricing
Kotlin Academy · Lektion

Vollständiges when

Decken Sie alle Fälle ab

Vollständiges when ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Alle Fälle abdecken

Ein vollständiges when behandelt jeden möglichen Wert. Wenn es als Ausdruck verwendet wird, verlangt Kotlin dies, damit immer ein Ergebnis erzeugt wird.

In dieser Lektion erfahren Sie, wie Sie when vollständig machen und warum das hilfreich ist.

else sorgt für vollständige Abdeckung

Bei offenen Werten wie Int deckt ein else-Zweig alles ab, was nicht ausdrücklich aufgeführt ist.

Dadurch wird garantiert, dass when immer einen passenden Fall findet.

fun label(n: Int): String = when (n) {
    0 -> "zero"
    1 -> "one"
    else -> "many"
}

fun main() {
    println(label(0))
    println(label(5))
}

Enums ermöglichen vollständige Abdeckung

Bei einem Enum kennt der Compiler jeden möglichen Wert. Wenn Sie alle Werte aufführen, können Sie else weglassen.

enum class Direction { NORTH, SOUTH, EAST, WEST }

fun turn(d: Direction): String = when (d) {
    Direction.NORTH -> "up"
    Direction.SOUTH -> "down"
    Direction.EAST -> "right"
    Direction.WEST -> "left"
}

fun main() {
    println(turn(Direction.EAST))
}

Ein Enum-Fall fehlt

Wenn Sie in einem Ausdruck mit when einen Enum-Wert vergessen, meldet der Compiler einen Fehler.

So werden Fehler sofort erkannt, sobald Sie eine neue Enum-Konstante hinzufügen.

enum class Status { ACTIVE, PAUSED, STOPPED }

fun describe(s: Status): String = when (s) {
    Status.ACTIVE -> "running"
    Status.PAUSED -> "paused"
    Status.STOPPED -> "stopped"
}

fun main() {
    println(describe(Status.PAUSED))
}

Versiegelte Klassen

Eine versiegelte Klasse besitzt eine feste Menge von Unterklassen, die zur Kompilierzeit bekannt ist.

Dadurch kann when alle Untertypen vollständig abdecken, ohne dass else erforderlich ist.

sealed class Shape
class Circle(val r: Double) : Shape()
class Square(val s: Double) : Shape()

fun area(shape: Shape): Double = when (shape) {
    is Circle -> 3.14159 * shape.r * shape.r
    is Square -> shape.s * shape.s
}

fun main() {
    println(area(Square(4.0)))
}

Warum vollständige Abdeckung hilfreich ist

Ein vollständiges when macht fehlende Fälle zu Compilerfehlern statt zu unbemerkten Fehlern.

Wenn Sie eine neue Unterklasse oder einen neuen Enum-Wert hinzufügen, zeigt der Compiler auf jedes when, das Sie aktualisieren müssen.

Anweisungen müssen nicht vollständig sein

Wenn when als Anweisung verwendet und keiner Variablen zugewiesen wird, ist keine vollständige Abdeckung erforderlich.

Bei Enums und versiegelten Typen ist eine vollständige Abdeckung trotzdem eine gute Praxis.

enum class Light { RED, GREEN }

fun main() {
    val light = Light.RED
    when (light) {
        Light.RED -> println("stop")
        Light.GREEN -> println("go")
    }
}

Sealed und Data kombinieren

Versiegelte Hierarchien verwenden häufig Unterklassen vom Typ data class. Dadurch erhalten Sie sowohl eine vollständige Fallunterscheidung als auch Smart Casts für den Zugriff auf Eigenschaften.

sealed class Result
data class Ok(val value: Int) : Result()
data class Err(val message: String) : Result()

fun show(r: Result): String = when (r) {
    is Ok -> "ok: " + r.value
    is Err -> "error: " + r.message
}

fun main() {
    println(show(Ok(42)))
    println(show(Err("boom")))
}

else als Sicherheitsnetz

Sie können einem when für einen versiegelten Typ oder ein Enum weiterhin else hinzufügen. Dann warnt der Compiler jedoch nicht mehr vor neuen Fällen.

Wenn Sie else weglassen, bleibt die Sicherheit zur Kompilierzeit erhalten. Bei geschlossenen Typen sollten Sie daher darauf verzichten.

enum class Coin { HEADS, TAILS }

fun flip(c: Coin): Int = when (c) {
    Coin.HEADS -> 1
    Coin.TAILS -> 0
}

fun main() {
    println(flip(Coin.HEADS))
}

Boolean und geschlossene Werte

Ein Boolean besitzt nur zwei Werte. Wenn Sie beide aufführen, ist when auch ohne else vollständig.

fun yesNo(flag: Boolean): String = when (flag) {
    true -> "yes"
    false -> "no"
}

fun main() {
    println(yesNo(true))
    println(yesNo(false))
}

Alles zusammenführen

Ein vollständiges when bedeutet, dass alle Fälle abgedeckt sind:

  • else deckt offene Werte wie Int ab
  • Enums, versiegelte Klassen und Boolean können ohne else vollständig abgedeckt werden
  • Der Compiler meldet fehlende Fälle, wenn Sie neue hinzufügen
sealed class Event
object Start : Event()
object Stop : Event()

fun handle(e: Event): String = when (e) {
    is Start -> "starting"
    is Stop -> "stopping"
}

fun main() {
    println(handle(Start))
    println(handle(Stop))
}

Kurze Wissensprüfung

Testen Sie Ihr Verständnis von vollständigen when-Ausdrücken.

Zusammenfassung

Sie haben gelernt, wie Sie when vollständig machen:

  • else behandelt offene Werte
  • Enums, versiegelte Klassen und Boolean können vollständig abgedeckt werden
  • Prüfungen zur Kompilierzeit erkennen fehlende Fälle

Damit ist der Kurs When Expressions and Smart Casts abgeschlossen.

Häufig gestellte Fragen

Ist die Lektion „Vollständiges when“ kostenlos?

Ja — der vollständige Text von „Vollständiges when“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Vollständiges when“?

Decken Sie alle Fälle ab Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Vollständiges when“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. when als Ausdruck
  2. Smart Casts
  3. Operatoren is und as
  4. Vollständiges when
← Zurück zu Kotlin Academy