Nullable kontra ikke-null-typer
Typeindikatoren ?.
Nullable kontra ikke-null-typer er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hvorfor null-sikkerhet er viktig
Mange krasj i Android-apper skyldes én feil: at man bruker en verdi som faktisk mangler. I andre språk blir dette en fryktet NullPointerException under kjøring.
Kotlin håndterer dette ved kompilering. Typesystemet holder oversikt over hvilke verdier som kan være null, og hvilke som aldri kan være det. Denne leksjonen introduserer grunnlaget for dette systemet.
Ikke-null-typer
Som standard kan en Kotlin-type ikke inneholde null. En String viser alltid til en faktisk streng.
Hvis De prøver å tilordne null til den, blir koden ikke kompilert. Dette er det trygge standardvalget.
fun main() {
val name: String = "Ada"
println(name.length)
}Null avvises
Se hva som skjer når De prøver å legge null inn i en ikke-null-type.
Kompilatoren stopper Dem umiddelbart. De kommer aldri til kjøring med en skjult feil.
val name: String = null // Compile error:
// Null can not be a value of a non-null type StringNullable typer med ?
Noen ganger kan en verdi faktisk mangle, for eksempel brukerens valgfrie mellomnavn. De velger dette eksplisitt ved å legge til ? i typen.
En String? kan inneholde en faktisk streng eller null. Spørsmålstegnet markerer typen som nullable.
fun main() {
val middleName: String? = null
println(middleName)
}To forskjellige typer
String og String? er ikke samme type. Den andre er en bredere type som også inkluderer verdien null.
Det er dette skillet som lar kompilatoren beskytte Dem. Den vet nøyaktig hvor null kan forekomme.
val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never canDe kan ikke bruke nullable direkte
Kompilatoren lar Dem ikke kalle en metode på en nullable verdi uten at De sjekker den først.
Fordi middleName kan være null, gir det en kompileringsfeil å kalle .length på den. De må håndtere null-tilfellet.
val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowedSjekke med if
Den enkleste måten å bruke en nullable verdi på er å sjekke den med en if-betingelse.
I grenen der De har bekreftet at verdien ikke er null, gjør Kotlin automatisk en smart-cast til en ikke-null-type, slik at .length fungerer.
fun main() {
val text: String? = "Kotlin"
if (text != null) {
println(text.length)
}
}Smart-casts
Etter en vellykket null-sjekk husker kompilatoren at verdien ikke er null resten av blokken. Dette kalles en smart-cast.
De skrev ikke noen konvertering. Kotlin holdt automatisk oversikt for Dem.
fun describe(s: String?) {
if (s == null) return
// s is now treated as String here
println("Length is " + s.length)
}Funksjonsparametere
Hvorvidt en parameter er nullable, er en del av funksjonens kontrakt. En ikke-null-parameter lover kallere at den aldri mottar null.
En nullable parameter signaliserer at manglende inndata forventes og håndteres.
fun greet(name: String) {
println("Hi, " + name)
}
// greet(null) would not compileReturtyper kan være nullable
En funksjon kan returnere null for å signalisere at ingenting ble funnet. Marker returtypen med ?.
Da vet kallere at de må sjekke resultatet før de bruker det.
fun firstChar(s: String): Char? {
if (s.isEmpty()) return null
return s[0]
}Bruk ikke-null som standard
En god regel er å foretrekke ikke-null-typer. Legg bare til ? når en verdi faktisk kan mangle.
Da blir koden mer presis. Jo færre nullable typer De har, desto færre null-sjekker trenger De senere.
// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = nullHurtigsjekk
Test forståelsen Deres av nullable og ikke-null-typer.
Oppsummering
Kotlin-typer er ikke-null som standard og avviser null ved kompilering. Legg til ? for å gjøre en type nullable når en verdi kan mangle.
De kan ikke bruke en nullable verdi direkte. En null-sjekk gjør automatisk en smart-cast til ikke-null, slik at De kan bruke verdien trygt. Deretter skal De lære kortere måter å håndtere nullable verdier på.
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 36
- Leksjoner
- 152
Ofte stilte spørsmål
Er leksjonen «Nullable kontra ikke-null-typer» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Nullable kontra ikke-null-typer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Nullable kontra ikke-null-typer»?
Typeindikatoren ?. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Android Academy?
Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Nullable kontra ikke-null-typer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?
Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Nullable kontra ikke-null-typer
- Sikre kall og Elvis
- let, also og scope-funksjoner
- Unngå NullPointerExceptions