runCatching und Result<T>
Verwenden Sie runCatching, um Exceptions in Result zu kapseln und funktional zu verarbeiten.
runCatching und Result<T> ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Result<T> kurz erklärt
Result<T> ist K मन?otlin's Wrapper für das Ergebnis einer Operation: entweder ein Erfolg mit einem Wert vom Typ T oder ein Fehler mit einem Throwable.
Grundlagen von runCatching
runCatching { ... } führt den Block aus und verpackt das Ergebnis in ein Result.
fun main() {
val good = runCatching { 10 / 2 }
val bad = runCatching { 10 / 0 }
println("good isSuccess = ${good.isSuccess}")
println("bad isFailure = ${bad.isFailure}")
}Den Wert extrahieren
getOrNull gibt den Wert oder null zurück. getOrThrow löst bei einem Fehler erneut eine Exception aus. getOrDefault gibt einen Ersatzwert zurück.
fun main() {
val r = runCatching { "42".toInt() }
println(r.getOrNull()) // 42
println(r.getOrDefault(-1)) // 42
val bad = runCatching { "x".toInt() }
println(bad.getOrNull()) // null
println(bad.getOrDefault(0)) // 0
}Die Exception extrahieren
exceptionOrNull() gibt bei einem Fehler die Exception und bei einem Erfolg null zurück.
fun main() {
val r = runCatching { error("boom") }
println(r.exceptionOrNull()?.message) // boom
}Mit map transformieren
map { value -> ... } transformiert den Erfolgswert. Ein Fehler wird unverändert weitergereicht.
fun main() {
val r = runCatching { "10" }.map { it.toInt() * 2 }
println(r.getOrNull()) // 20
}mapCatching
mapCatching verpackt die Transformation in ein try/catch, sodass auch Exceptions innerhalb des Lambdas zu Fehlern werden.
fun main() {
val r = runCatching { "abc" }.mapCatching { it.toInt() }
println(r.isFailure) // true
println(r.exceptionOrNull()?.message) // For input string: "abc"
}recover und recoverCatching
recover { e -> fallback } wandelt Fehler in Erfolge um, indem ein Wiederherstellungswert berechnet wird.
fun main() {
val r = runCatching { "abc".toInt() }
.recover { -1 }
println(r.getOrNull()) // -1
}onSuccess / onFailure
Verwenden Sie onSuccess und onFailure für Seiteneffekte, ohne das Result zu verändern.
fun main() {
runCatching { "42".toInt() }
.onSuccess { println("parsed: $it") }
.onFailure { println("failed: ${it.message}") }
}fold für beide Pfade
fold(onSuccess, onFailure) gibt aus beiden Zweigen einen einheitlichen Typ zurück – nützlich, um ihn in einen für die Benutzeroberfläche geeigneten Wert umzuwandeln.
fun main() {
val r = runCatching { "10".toInt() }
val msg: String = r.fold(
onSuccess = { "OK: $it" },
onFailure = { "ERR: ${it.message}" }
)
println(msg)
}Result als Rückgabetyp verwenden
Funktionen können Result<T> zurückgeben, damit die Fehlerbehandlung am Aufrufort explizit wird.
fun parseInt(s: String): Result<Int> = runCatching { s.toInt() }
fun main() {
parseInt("42").onSuccess { println("got $it") }
parseInt("xx").onFailure { println("oops: ${it.message}") }
}Operationen verketten
Kombinieren Sie runCatching mit map, mapCatching und recover zu einer flüssigen Fehlerpipeline.
fun fetchUserId(): Result<Int> = runCatching { 42 }
fun loadName(id: Int): String = "User-$id"
fun main() {
val name = fetchUserId()
.map { loadName(it) }
.recover { "Anonymous" }
.getOrNull()
println(name)
}Kurztest
Welcher Builder führt einen Block aus und verpackt das Ergebnis – Wert oder Exception – in ein Result?
Zusammenfassung
Result<T> repräsentiert Erfolg oder Fehler. Erstellen Sie es mit runCatching, transformieren Sie es mit map/mapCatching, führen Sie eine Wiederherstellung mit recover durch, beobachten Sie es mit onSuccess/onFailure und führen Sie beide Pfade mit fold zusammen. Ideal für explizite Fehlerpipelines.
Lerne Kotlin mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 51
- Lektionen
- 203
Häufig gestellte Fragen
Ist die Lektion „runCatching und Result<T>“ kostenlos?
Ja — der vollständige Text von „runCatching und Result<T>“ 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 „runCatching und Result<T>“?
Verwenden Sie runCatching, um Exceptions in Result zu kapseln und funktional zu verarbeiten. 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 3 von 4.
Wie lange dauert die Lektion „runCatching und Result<T>“?
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
- try/catch/finally als Ausdruck
- Benutzerdefinierte Exception-Klassen erstellen
- runCatching und Result
- Exceptions erneut auslösen und verketten