Nullable kontra non-null-typer
Typemarkøren ?.
Nullable kontra non-null-typer er en gratis Android Academy-lektion på CoddyKit. Dette er lektion 1 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 Android Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Android Academy-kurset indeholder 4 lektioner i alt.
Hvorfor null-sikkerhed er vigtig
Mange nedbrud i Android-apps skyldes én fejl: at bruge en værdi, der faktisk mangler. I andre sprog bliver det til en frygtet NullPointerException under kørsel.
Kotlin håndterer dette under kompileringen. Typesystemet holder styr på, hvilke værdier der kan være null, og hvilke der aldrig kan. Denne lektion introducerer grundlaget for systemet.
Ikke-null-typer
Som standard kan en Kotlin-type ikke indeholde null. En String peger altid på en rigtig streng.
Hvis du forsøger at tildele null til den, kan koden slet ikke kompileres. Det er den sikre standard.
fun main() {
val name: String = "Ada"
println(name.length)
}Null afvises
Se, hvad der sker, når du forsøger at placere null i en ikke-null-type.
Compileren stopper dig med det samme. Du når aldrig frem til kørsel med en skjult fejl.
val name: String = null // Compile error:
// Null can not be a value of a non-null type StringNullable typer med ?
Nogle gange kan en værdi reelt mangle, f.eks. en brugers valgfrie mellemnavn. Du vælger dette ved at tilføje ? til typen.
En String? kan indeholde en rigtig streng eller null. Spørgsmålstegnet markerer typen som nullable.
fun main() {
val middleName: String? = null
println(middleName)
}To forskellige typer
String og String? er ikke samme type. Den anden er en bredere type, der også indeholder værdien null.
Denne forskel gør det muligt for compileren at beskytte dig. Den ved præcis, hvor null kan forekomme.
val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never canDu kan ikke bruge nullable direkte
Compileren lader dig ikke kalde en metode på en nullable værdi uden først at kontrollere den.
Fordi middleName kan være null, giver det en kompileringsfejl at kalde .length på den. Du skal håndtere null-tilfældet.
val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowedKontrol med if
Den enkleste måde at bruge en nullable værdi på er at kontrollere den med en if-betingelse.
I den gren, hvor du har bevist, at den ikke er null, konverterer Kotlin den automatisk til en ikke-null-type, så .length virker.
fun main() {
val text: String? = "Kotlin"
if (text != null) {
println(text.length)
}
}Smarte typekonverteringer
Efter en vellykket null-kontrol husker compileren, at værdien ikke er null, resten af blokken. Det kaldes en smart cast.
Du skrev ikke selv nogen konvertering. Kotlin holdt automatisk styr på det for dig.
fun describe(s: String?) {
if (s == null) return
// s is now treated as String here
println("Length is " + s.length)
}Funktionsparametre
Om en parameter er nullable, er en del af funktionens kontrakt. En ikke-null-parameter lover kaldere, at den aldrig modtager null.
En nullable parameter signalerer, at manglende input forventes og håndteres.
fun greet(name: String) {
println("Hi, " + name)
}
// greet(null) would not compileReturtyper kan være nullable
En funktion kan returnere null for at signalere, at der ikke blev fundet noget. Markér dens returtype med ?.
Kaldere ved derefter, at de skal kontrollere resultatet, før de bruger det.
fun firstChar(s: String): Char? {
if (s.isEmpty()) return null
return s[0]
}Brug ikke-null som standard
En god regel er at foretrække ikke-null-typer. Tilføj kun ?, når en værdi reelt kan mangle.
Det holder din kode ærlig. Jo færre nullable typer du har, jo færre null-kontroller får du brug for senere.
// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = nullHurtig afprøvning
Afprøv din forståelse af nullable og ikke-null-typer.
Opsummering
Kotlin-typer er som standard ikke-null og afviser null under kompileringen. Tilføj ? for at gøre en type nullable, når en værdi kan mangle.
Du kan ikke bruge en nullable værdi direkte. En null-kontrol laver automatisk en smart cast til ikke-null, så du kan bruge værdien sikkert. Nu skal du lære kortere måder at håndtere nullable værdier på.
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
- 36
- Lektioner
- 152
Ofte stillede spørgsmål
Er lektionen “Nullable kontra non-null-typer” gratis?
Ja — alle 3 lektioner i læringssporet Android Academy, inklusive “Nullable kontra non-null-typer”, 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. Android Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Nullable kontra non-null-typer”?
Typemarkøren ?. Du øver dig i Android 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å Android Academy?
Der kræves ingen tidligere erfaring. Android 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 1 af 4.
Hvor lang tid tager lektionen “Nullable kontra non-null-typer”?
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 Android Academy-lektion?
Ja. Alle Android 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.
Alle lektioner i dette kursus
- Nullable kontra non-null-typer
- Sikre kald og Elvis
- let, also og scope-funktioner
- Undgå NullPointerExceptions