Option och nullable: När ska de användas?
Jämför Arrows Option-typ med Kotlins nullable-typer och välj rätt alternativ.
Option och nullable: När ska de användas? är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Två sätt att representera frånvaro
Kotlांस nullbara typer
Kotlin:s T? är det idiomatiska valet för att representera frånvaro i de flesta Kotlin-program. Kompilatorn tvingar fram nullkontroller, safe-call-operatorn ?. kedjar anrop på ett smidigt sätt och ?: "default" tillhandahåller reservvärden koncist:
val name: String? = findUser(id)?.name
val display = name ?: "Anonymous"Arrows Option<A>
Option kapslar in ett nullbart koncept i en riktig algebraisk typ med map, flatMap, filter, fold med mera. Den integreras naturligt med Arrows funktionella pipeline-stil:
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> = NoneKonvertera mellan Option och nullbara värden
Konvertera fritt: value?.toOption() kapslar in ett nullbart värde i Option; option.getOrNull() hämtar värdet eller null; option.getOrElse { default } tillhandahåller ett reservvärde:
val opt: Option<String> = nullableString.toOption()
val back: String? = opt.getOrNull()map och flatMap på Option
map { } omvandlar ett Some-värde och lämnar None oförändrat. flatMap { } kedjar operationer som själva returnerar Option:
val length: Option<Int> = "hello".toOption().map { it.length } // Some(5)
val noneLength: Option<Int> = (null as String?).toOption().map { it.length } // Nonefilter på Option
filter { predicate } omvandlar ett Some till None om predikatet är falskt:
val positiveAge: Option<Int> = 25.toOption().filter { it > 0 } // Some(25)
val rejectedAge: Option<Int> = (-1).toOption().filter { it > 0 } // Nonefold: hantera Option
fold(ifEmpty, ifSome) hanterar båda fallen i ett enda uttryck utan mönstermatchning:
val result: String = someOption.fold(
ifEmpty = { "Nothing here" },
ifSome = { value -> "Got: $value" }
)När bör nullable T? föredras?
Föredra Kotlin nullable (T?) när:
- Ni skriver idiomatisk Kotlin-kod som andra ska läsa
- Ni behöver nullsäkra operatorsekvenser (
?.,?:) - Typen används i API:er som inte använder Arrow
- Prestandan är kritisk (ingen boxing-overhead)
När bör Option<A> föredras?
Föredra Option när:
- Ni redan använder Arrows funktionella pipeline (
map,flatMap) - Ni vill komponera valfria värden med
EitherellerRaise - Ni vill göra frånvaro tydlig i ett generiskt funktionellt sammanhang
- Ni bygger ett bibliotek där anropande kod kanske inte använder Kotlin
Option inuti either { }
Inuti Arrows either { }-block kan ni anropa .bind() på ett Option genom att först konvertera det till Either:
fun findUserOpt(id: Long): Option<User> = TODO()
fun getUser(id: Long): Either<UserError, User> = either {
findUserOpt(id)
.toEither { UserError.NotFound }
.bind()
}Antimönstret Option
Använd inte Option överallt bara för att typen finns. I Kotlin är String? tydligare än Option i de flesta applikationer. Reservera Option för fall där dess funktionella operatorer faktiskt tillför värde.
Snabb kontroll
Vad returnerar None.map { it.length } i Arrow:s Option?
Sammanfattning: Option och nullbara typer
Viktiga lärdomar:
- Kotlin
T?: idiomatiskt i den mesta koden; framtvingas av kompilatorn; använder?.och?: - Arrow
Option: algebraisk typ med funktionella operatorer (map,flatMap,fold,filter) - Konvertera med
.toOption()och.getOrNull() - Föredra
T?i idiomatisk Kotlin; föredraOptionnär ni sätter samman funktionella pipelines med Arrow
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Option och nullable: När ska de användas?” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Option och nullable: När ska de användas?”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Option och nullable: När ska de användas?”?
Jämför Arrows Option-typ med Kotlins nullable-typer och välj rätt alternativ. Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?
Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Option och nullable: När ska de användas?”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?
Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Either : typsäker felhantering utan exception
- Arrow Raise DSL: Komponera typade fel
- Option och nullable: När ska de användas?
- Funktionell domänmodellering med Arrows kärntyper