Operatoren !!
Tving non-null frem, og forstå risiciene
Operatoren !! er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Tving til ikke-null
Nogle gange er du sikker på, at en værdi, der kan være null, ikke er null, men compileren klager stadig.
Operatoren til ikke-null-påstand, !!, fortæller compileren, at den skal stole på dig og behandle værdien som ikke-null.
Grundlæggende brug
Hvis du tilføjer !!, konverteres en type, der kan være null, til dens ikke-null-modstykke.
Hvis værdien faktisk ikke er null, fungerer koden præcis som et normalt kald.
fun main() {
val name: String? = "Kotlin"
println(name!!.length)
}Faren
Hvis værdien faktisk er null, kaster !! en NullPointerException med det samme.
Dette er det eneste sted, hvor Kotlin lader en NPE opstå, og det er helt dit ansvar.
fun main() {
val name: String? = null
try {
println(name!!.length)
} catch (e: NullPointerException) {
println("Boom: NullPointerException")
}
}Hvorfor den findes
Operatoren er med vilje grim. To udråbstegn skiller sig ud i en kodegennemgang og signalerer et sted, hvor du har omgået sikkerhedsnettet.
Den findes til de sjældne tilfælde, hvor du virkelig ved mere end compileren.
Et sikkert kald er normalt bedre
I de fleste situationer er et sikkert kald ?. sammen med Elvis ?: sikrere og lige så kort.
Sammenlign de to fremgangsmåder nedenfor, som opnår det samme mål.
fun main() {
val name: String? = null
val safeLength = name?.length ?: 0
println(safeLength)
}Undgå at kæde !!
Kæd aldrig flere !! sammen som i a!!.b!!.c. Hvis det får programmet til at gå ned, kan du ikke se, hvilken del der var null.
Del udtrykket op, eller brug sikre kald i stedet.
fun main() {
val text: String? = "hi"
// bad style: text!!.uppercase()!! is hard to debug
val good = text?.uppercase() ?: ""
println(good)
}Et legitimt anvendelsestilfælde
Et acceptabelt tilfælde er en værdi, som du har angivet tidligere, og som du ved er initialiseret nu.
Foretræk selv da lateinit eller en omstrukturering, når det er muligt.
fun main() {
var config: String? = null
config = "loaded"
// we just assigned it, so !! is safe here
println(config!!.uppercase())
}Læsning af stacktracen
Når !! fejler, peger undtagelsen på den præcise linje. Den præcision er den eneste fordel sammenlignet med et lydløst forkert resultat.
Brug meddelelsen til at finde og rette den antagelse, der var forkert.
fun length(text: String?): Int {
return text!!.length
}
fun main() {
println(length("abc"))
// length(null) would throw on the !! line
}Refaktorering væk fra !!
De fleste !! kan fjernes ved at håndtere null korrekt. Nedenfor gør en Elvis-reserveværdi funktionen total og fri for nedbrud.
fun length(text: String?): Int {
return text?.length ?: 0
}
fun main() {
println(length("abc"))
println(length(null))
}Tommelfingerregel
Betragt hvert !! som et spørgsmål: Er jeg helt sikker på, at dette aldrig er null?
- Hvis ja, og det sker sjældent → acceptabelt
- Hvis du er usikker → brug
?.og?:
Samlet overblik
Operatoren !! er et skarpt værktøj:
- Den tvinger en værdi, der kan være null, over i en ikke-null-type
- Den kaster en NullPointerException, hvis værdien er null
- Foretræk sikre kald og Elvis i næsten alle tilfælde
fun main() {
val sure: String? = "definitely here"
println(sure!!.length)
val maybe: String? = null
println(maybe?.length ?: -1)
}Hurtigt tjek
Test din forståelse af operatoren til ikke-null-påstand.
Opsummering
Du har lært om operatoren !!:
- Den hævder, at en værdi, der kan være null, ikke er null
- Den kaster en NullPointerException, når antagelsen er forkert
- Den bør være sidste udvej, ikke en vane
Nu skal du se, hvordan nullbarhed kommer fra Java via platformtyper.
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Operatoren !!” gratis?
Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “Operatoren !!”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Operatoren !!”?
Tving non-null frem, og forstå risiciene Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Kotlin Academy?
Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Operatoren !!”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?
Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.