Nullable kontra icke-null-typer
Typmarkören ?.
Nullable kontra icke-null-typer är en gratis lektion i Android Academy på CoddyKit. Detta är lektion 1 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 Android Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Android Academy innehåller totalt 4 lektioner.
Varför null-säkerhet är viktigt
Många krascher i Android-appar beror på ett enda misstag: att använda ett värde som egentligen saknas. I andra språk leder detta till ett fruktat NullPointerException under körning.
Kotlin hanterar detta vid kompilering. Typsystemet håller reda på vilka värden som kan vara null och vilka som aldrig kan vara det. I den här lektionen introduceras grunderna i systemet.
Icke-null-typer
Som standard kan en Kotlin-typ inte innehålla null. En String pekar alltid på en faktisk sträng.
Om du försöker tilldela null till den kompileras koden inte ens. Det här är det säkra standardläget.
fun main() {
val name: String = "Ada"
println(name.length)
}Null avvisas
Se vad som händer när du försöker lägga in null i en icke-null-typ.
Kompilatorn stoppar dig direkt. Du når aldrig körningen med ett dolt fel.
val name: String = null // Compile error:
// Null can not be a value of a non-null type StringNullable typer med ?
Ibland kan ett värde faktiskt saknas, till exempel en användares valfria mellannamn. Du väljer detta genom att lägga till ? efter typen.
En String? kan innehålla en faktisk sträng eller null. Frågetecknet markerar typen som nullable.
fun main() {
val middleName: String? = null
println(middleName)
}Två olika typer
String och String? är inte samma typ. Den andra är en bredare typ som även innehåller värdet null.
Det är denna skillnad som gör att kompilatorn kan skydda dig. Den vet exakt var null kan förekomma.
val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never canDu kan inte använda nullable direkt
Kompilatorn låter dig inte anropa en metod på ett nullable-värde utan att först kontrollera det.
Eftersom middleName kan vara null är det ett kompileringsfel att anropa .length på det. Du måste hantera null-fallet.
val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowedKontrollera med if
Det enklaste sättet att använda ett nullable-värde är att kontrollera det med ett if-villkor.
I grenen där du har bevisat att värdet inte är null gör Kotlin automatiskt en smart cast till en icke-null-typ, så .length fungerar.
fun main() {
val text: String? = "Kotlin"
if (text != null) {
println(text.length)
}
}Smarta castningar
Efter en lyckad null-kontroll kommer kompilatorn ihåg att värdet inte är null under resten av kodblocket. Detta kallas en smart cast.
Du skrev inte någon konvertering. Kotlin höll automatiskt reda på det åt dig.
fun describe(s: String?) {
if (s == null) return
// s is now treated as String here
println("Length is " + s.length)
}Funktionsparametrar
Om en parameter är nullable eller inte är en del av funktionens kontrakt. En icke-null-parameter lovar anroparna att den aldrig tar emot null.
En nullable-parameter signalerar att indata kan saknas och att detta hanteras.
fun greet(name: String) {
println("Hi, " + name)
}
// greet(null) would not compileReturtyper kan vara nullable
En funktion kan returnera null för att signalera att inget hittades. Markera returtypen med ?.
Då vet anroparna att de måste kontrollera resultatet innan de använder det.
fun firstChar(s: String): Char? {
if (s.isEmpty()) return null
return s[0]
}Utgå från icke-null
En bra regel är att föredra icke-null-typer. Lägg bara till ? när ett värde faktiskt kan saknas.
Det gör koden mer tillförlitlig. Ju färre nullable-typer du har, desto färre null-kontroller behöver du senare.
// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = nullSnabbtest
Testa din förståelse av nullable- och icke-null-typer.
Sammanfattning
Kotlin-typer är icke-null som standard och avvisar null vid kompilering. Lägg till ? för att göra en typ nullable när ett värde kan saknas.
Du kan inte använda ett nullable-värde direkt. En null-kontroll gör automatiskt en smart cast till icke-null, så att du kan använda värdet säkert. Nästa steg är att lära sig kortare sätt att hantera nullable-värden.
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
- 36
- Lektioner
- 152
Vanliga frågor
Är lektionen ”Nullable kontra icke-null-typer” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Android Academy, inklusive ”Nullable kontra icke-null-typer”, 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 Android Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Nullable kontra icke-null-typer”?
Typmarkören ?. Ni övar på Android 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 Android Academy?
Du behöver inga förkunskaper. Utbildningen i Android 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 1 av 4.
Hur lång tid tar lektionen ”Nullable kontra icke-null-typer”?
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 Android Academy-lektionen?
Ja. Varje Android 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
- Nullable kontra icke-null-typer
- Säkra anrop och Elvis
- let, also och scope-funktioner
- Undvik NullPointerExceptions