Option und Nullable: Wann Sie welches verwenden
Vergleichen Sie Arrows Option-Typ mit nullbaren Kotlin-Typen und wählen Sie die passende Variante.
Option und Nullable: Wann Sie welches verwenden 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.
Zwei Möglichkeiten, Abwesenheit darzustellen
Nullable Typen in Kotlin
Kotlins T? ist in den meisten Kotlin-Programmen die idiomatische Wahl für das Fehlen eines Werts. Der Compiler erzwingt Nullprüfungen, der Safe-Call-Operator ?. verkettet Aufrufe problemlos, und ?: "default" stellt auf kompakte Weise Ersatzwerte bereit:
val name: String? = findUser(id)?.name
val display = name ?: "Anonymous"Arrows Option<A>
Option kapselt das Konzept eines möglichen Nullwerts in einem echten algebraischen Typ mit map, flatMap, filter, fold und weiteren Funktionen. Es fügt sich natürlich in Arrows Stil funktionaler Pipelines ein:
import arrow.core.Option
import arrow.core.Some
import arrow.core.None
import arrow.core.toOption
val opt: Option<String> = "hello".toOption() // Some("hello")
val absent: Option<String> = NoneZwischen Option und Nullable konvertieren
Konvertieren Sie frei zwischen den Typen: value?.toOption() verpackt einen Nullable-Wert in Option; option.getOrNull() extrahiert den Wert oder null; option.getOrElse { default } stellt einen Ersatzwert bereit:
val opt: Option<String> = nullableString.toOption()
val back: String? = opt.getOrNull()map und flatMap für Option
map { } transformiert einen Some-Wert und lässt None unverändert. flatMap { } verkettet Operationen, die selbst Option zurückgeben:
val length: Option<Int> = "hello".toOption().map { it.length } // Some(5)
val noneLength: Option<Int> = (null as String?).toOption().map { it.length } // Nonefilter für Option
filter { predicate } wandelt ein Some in None um, wenn das Prädikat false ergibt:
val positiveAge: Option<Int> = 25.toOption().filter { it > 0 } // Some(25)
val rejectedAge: Option<Int> = (-1).toOption().filter { it > 0 } // Nonefold: Option verarbeiten
fold(ifEmpty, ifSome) behandelt beide Fälle in einem Ausdruck, ohne Pattern Matching zu verwenden:
val result: String = someOption.fold(
ifEmpty = { "Nothing here" },
ifSome = { value -> "Got: $value" }
)Wann Sie Nullable T? bevorzugen sollten
Bevorzugen Sie Kotlin-Nullable (T?), wenn:
- Sie idiomatischen Kotlin-Code schreiben, den andere lesen werden
- Sie nullsichere Operatorverkettungen (
?.,?:) benötigen - Der Typ in APIs verwendet wird, die Arrow nicht nutzen
- Performance entscheidend ist (kein Boxing-Overhead)
Wann Sie Option<A> bevorzugen sollten
Bevorzugen Sie Option, wenn:
- Sie bereits Arrows funktionale Pipeline (
map,flatMap) verwenden - Sie optionale Werte mit
EitheroderRaisekombinieren möchten - Sie das Fehlen eines Werts in einem generischen funktionalen Kontext explizit machen möchten
- Sie eine Bibliothek entwickeln, deren Aufrufer möglicherweise nicht Kotlin verwenden
Option innerhalb von either { }
Innerhalb von Arrows either { }-Block können Sie .bind() für ein Option aufrufen, indem Sie es zunächst in Either umwandeln:
fun findUserOpt(id: Long): Option<User> = TODO()
fun getUser(id: Long): Either<UserError, User> = either {
findUserOpt(id)
.toEither { UserError.NotFound }
.bind()
}Das Anti-Pattern mit Option
Verwenden Sie Option nicht überall, nur weil es existiert. In Kotlin ist String? in den meisten Anwendungscodes klarer als Option. Verwenden Sie Option nur dann, wenn seine funktionalen Operatoren einen echten Mehrwert bieten.
Schnelltest
Was liefert None.map { it.length } in Arrows Option zurück?
Zusammenfassung: Option und nullbare Typen
Die wichtigsten Erkenntnisse:
- Kotlin
T?: idiomatisch für den meisten Code; vom Compiler abgesichert; verwendet?.und?: - Arrow
Option: algebraischer Typ mit funktionalen Operatoren (map,flatMap,fold,filter) - Konvertieren Sie mit
.toOption()und.getOrNull() - Bevorzugen Sie
T?für idiomatisches Kotlin undOption, wenn Sie mit Arrow funktionale Pipelines zusammensetzen
Häufig gestellte Fragen
Ist die Lektion „Option und Nullable: Wann Sie welches verwenden“ kostenlos?
Ja — der vollständige Text von „Option und Nullable: Wann Sie welches verwenden“ 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 „Option und Nullable: Wann Sie welches verwenden“?
Vergleichen Sie Arrows Option-Typ mit nullbaren Kotlin-Typen und wählen Sie die passende Variante. 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 „Option und Nullable: Wann Sie welches verwenden“?
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
- Either : Typsichere Fehlerbehandlung ohne Exceptions
- Arrow-Raise-DSL: Typisierte Fehler kombinieren
- Option und Nullable: Wann Sie welches verwenden
- Funktionale Domänenmodellierung mit Arrows Core-Typen