Fehlerbehandlung in Kotlin: try/catch, Null Safety und Sealed Classes

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Fehlerbehandlung in Kotlin: try/catch und mehr



Fehlerbehandlung ist eine der Kernaufgaben beim Schreiben von zuverlässigem und robustem Code. Kotlin, als moderne Programmiersprache, bietet Entwicklern mehrere leistungsstarke Werkzeuge für die Arbeit mit Ausnahmen und unerwarteten Situationen. In diesem Artikel werden wir den klassischen Mechanismus try/catch, die Besonderheiten von null safety sowie fortgeschrittene Ansätze im Detail besprechen: die Verwendung von Result und sealed classes. Das Material wird sowohl für Anfänger als auch für erfahrene Programmierer nützlich sein, die ihr Wissen strukturieren möchten.



1. Klassisches try/catch in Kotlin



Kotlin ist vollständig kompatibel mit Java und unterstützt den traditionellen try/catch/finally-Block. Es gibt jedoch wichtige Unterschiede: In Kotlin sind Ausnahmen unchecked (ungeprüft), das heißt, der Compiler zwingt Sie nicht, sie zu behandeln. Das macht den Code prägnanter, erfordert aber Aufmerksamkeit.



Die Syntax sieht so aus:



try {    // Code, der eine Ausnahme auslösen könnte    val result = riskyOperation()    println("Ergebnis: $result")} catch (e: Exception) {    // Behandlung der Ausnahme    println("Ein Fehler ist aufgetreten: ${e.message}")} finally {    // Der Block wird auf jeden Fall ausgeführt    println("Abschluss der Operation")}


In Kotlin kann try als Ausdruck verwendet werden, der einen Wert zurückgibt:



val number: Int? = try {    "123".toInt()} catch (e: NumberFormatException) {    null}println(number) // Gibt aus: 123


Das ist besonders praktisch, wenn man ein Ergebnis oder einen Standardwert ohne unnötige Variablen erhalten möchte.



2. Null Safety: Fehlervermeidung auf Typebene



Eine der Hauptfunktionen von Kotlin ist null safety. Die Sprache löst das Problem des NullPointerException bereits zur Kompilierzeit. Typen in Kotlin werden in nullable (können null sein) und non-null (können nicht null sein) unterteilt.



Beispiel:



var name: String = "Kotlin"  // Kann nicht null sein// name = null // Kompilierfehler!

var nullableName: String? = "Kotlin" // Kann null seinnullableName = null // Funktioniert


Für die sichere Arbeit mit nullable Typen bietet Kotlin mehrere Operatoren:



  • ?. (safe call) — führt die Operation nur aus, wenn der Wert nicht null ist:
  • val length = nullableName?.length // Wenn null, dann null


  • ?: (elvis operator) — gibt einen Standardwert zurück, wenn das Objekt null ist:
  • val length = nullableName?.length ?: 0


  • !! (not-null assertion) — behauptet, dass der Wert nicht null ist (mit Vorsicht verwenden):
  • val length = nullableName!!.length // Wenn null — Ausnahme


Die Verwendung von null safety anstelle von try/catch für Null-Prüfungen macht den Code lesbarer und sicherer.



3. Verwendung von Result für einen funktionalen Ansatz



Kotlin stellt die eingebaute Klasse Result<T> zur Verfügung, die das Ergebnis einer Operation darstellt, die entweder erfolgreich sein oder mit einem Fehler enden kann. Dies ist eine Alternative zu try/catch, die auf funktionaler Programmierung basiert.



Anwendungsbeispiel:



fun riskyDivision(a: Int, b: Int): Result<Int> {    return runCatching {        a / b    }}

fun main() { val result = riskyDivision(10, 0)

result.onSuccess { value -> println("Erfolg: $value") }.onFailure { error -> println("Fehler: ${error.message}") }

// Oder man kann den Wert mit einem Default erhalten val value = result.getOrDefault(0) println("Wert: $value")}


runCatching ist eine praktische Wrapper-Funktion, die alle Ausnahmen abfängt und ein Result zurückgibt. Sie können Result mit Aufrufketten kombinieren, was

Blogs

Buchempfehlungen