Digital Campus | En verden af kode | Hacza

Software Kurser => Kotlin => Emne startet af: Hacza Dato Dec 26, 2025, 02:42 PM

Titel: Null Safety i Kotlin: Redning fra Null Pointer Exceptions
Indlæg af: Hacza Dato Dec 26, 2025, 02:42 PM
Kotlin tilbyder, i modsætning til Java, null safety (null sikkerhed) funktionen indbygget på sprogniveau. Dette forhindrer i høj grad en af de mest almindelige runtime-fejl, NullPointerException (NPE). I Kotlin kan en variabel enten være null eller ikke; denne tilstand er tvunget af typesystemet. I denne artikel vil vi undersøge nullable og non-nullable typer, safe calls, Elvis operator og andre null håndteringsteknikker med detaljerede eksempler.

Nullable og Non-Nullable Typer
I Kotlin er alle typer som standard non-nullable (accepterer ikke null).
var navn: String = "Ahmet"
navn = null // Kompileringsfejl!
var email: String? = "[email protected]" // ? gør den nullable
email = null // Dette accepteres

Hvis en variabel er nullable, kan du ikke udføre operationer direkte på den. Kompilatoren tvinger dig.
Safe Calls (?) og Elvis Operator (?):

De to mest anvendte operatorer:
val længde = email?.length // email null => længde = null
println(længde) // udskriver null

val længde2 = email?.length ?: 0 // null => 0 returneres
println(længde2) // email null => 0

Sammen brug:
Null Kontrol: if og let
if (email != null) {
    println(email.length) // email opfattes automatisk som non-nullable
}
// let med sikker blok
email?.let {
    println("Email længde: ${it.length}")
} // Eller kortere
email?.let { println("Email: $it") } ?: println("Email mangler")

Non-Null Assertion (!! Operator)
Bruges i situationer, hvor du siger "Jeg er sikker, det er ikke null!". Hvis null, kaster det NPE – brug med forsigtighed!
val længde = email!!.length // email null => crash
Generelt ikke foretrukket; undgå, når sikre alternativer findes.

Lateinit og Lazy til at Udsætte Null Problemet
I nogle situationer (især i Android med Views) skal variablen initialiseres senere.

Sammenligning af Null Håndteringsmetoder
Her er en oversigt over null håndteringsmetoder uden tabel:

Null Safety i Funktioner
fun beregnLængde(tekst: String?): Int {
    return tekst?.length ?: 0
}
fun obligatoriskTekst(tekst: String?): String {
    return tekst ?: throw IllegalArgumentException("Tekst må ikke være tom")
}

Platform typer (fra Java): Hvis @Nullable / @NotNull annotationer findes, genkender Kotlin dem, ellers bliver det ! (platform type) – vær opmærksom.

Bedste Praksis
• Brug non-nullable typer så meget som muligt.
• Gør safe call og Elvis operator til en daglig vane.
• Hold !! operatoren på et minimum (rødt flag i code review).
• Vær opmærksom på platform typer, når du arbejder med Java kode.
• Brug patterns som sealed class eller Result type til bedre håndtering af fejltilstande.

Konklusion
Kotlins null safety funktion gør din kode meget mere sikker og læsbar. Når du bruger denne mekanisme korrekt, forsvinder NullPointerException næsten helt. I starten kan det virke som for meget kontrol, men med tiden vil du se, hvor stor en fordel det er.

For at øve dig, prøv at oprette en brugerlogin-form og håndter nullable felter sikkert!

Jeg venter på dine spørgsmål i kommentarerne.