Android Academy · Les

NullPointerExceptions voorkomen

Patronen voor veilige code.

Les 4 van 413 stappen

NullPointerExceptions voorkomen is een gratis Android Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 4 lessen.

Het doel: geen NPE's

Een NullPointerException, of NPE, ontstaat wanneer code iets gebruikt dat daadwerkelijk null is. Kotlin is ontworpen om dit soort fouten zeldzaam te maken.

In deze les combineer je de hulpmiddelen die je hebt geleerd en leer je over de paar manieren waarop er toch nog een NPE kan optreden.

De operator !!

De niet-nullbewering !! vertelt de compiler dat hij erop mag vertrouwen dat een waarde niet null is. Als je ongelijk hebt, wordt er een NPE gegenereerd.

De operator neemt de veiligheid weg, dus gebruik hem zelden en alleen wanneer je het zeker weet.

fun main() {
    val name: String? = "Ada"
    println(name!!.length)  // works, name is not null
}

!! kan een crash veroorzaken

Als de waarde inderdaad null is, genereert !! op die exacte regel een NullPointerException.

Dit is de belangrijkste manier om het probleem dat Kotlin voorkomt opnieuw te introduceren. Vermijd !! wanneer een veilige aanroep of Elvis volstaat.

val name: String? = null
println(name!!.length)
// throws KotlinNullPointerException

Kies veilige alternatieven

Vrijwel elk gebruik van !! kan worden herschreven met ?. en ?:. De veilige versie kan niet crashen.

Vergelijk hieronder de riskante en veilige vormen.

// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0

Valideer vroeg

Handel null af aan de grens van je code en werk daarna met niet-nullwaarden. Gebruik Elvis met return of throw om ontbrekende invoer meteen af te wijzen.

Na deze controle wordt de waarde via een smart cast als niet-null behandeld.

fun length(s: String?): Int {
    val text = s ?: return 0
    return text.length
}

requireNotNull

Wanneer null echt op een fout duidt, genereert requireNotNull een duidelijke foutmelding en retourneert de functie de niet-nullwaarde.

Dit is beschrijvender dan !!, omdat je een bericht kunt toevoegen.

fun start(config: String?) {
    val c = requireNotNull(config) { "config missing" }
    println(c.length)
}

Platformtypen uit Java

Waarden uit Java hebben een onbekende nullbaarheid en worden platformtypen genoemd. Kotlin kan niet garanderen dat ze niet null zijn.

Wanneer je Java-bibliotheken gebruikt, declareer je het verwachte type expliciet en handel je null defensief af.

// From Java: String maybe = obj.getName();
val name: String? = obj.name  // be safe
println(name?.length ?: 0)

Valkuil van lateinit

Met een lateinit var kun je het initialiseren van een niet-null-eigenschap uitstellen. Als je deze eigenschap echter vóór de toewijzing gebruikt, wordt er een uitzondering gegenereerd.

Gebruik lateinit alleen wanneer je zeker weet dat de waarde vóór elke toegang is ingesteld.

lateinit var config: String
fun read() {
    println(config.length)
    // crashes if config was never set
}

Standaardwaarden in plaats van null

Vaak kun je nullbaarheid helemaal vermijden door een verstandige standaardwaarde te kiezen. Een lege tekenreeks of lege lijst is vaak beter dan null.

Minder nullable typen betekent minder kans op een NPE.

fun main() {
    val tags: List<String> = emptyList()
    println(tags.size)  // 0, never null
}

Een veilige verwerkingsketen

Dit programma leest een optionele waarde, zet die veilig om en produceert altijd een resultaat. Geen !!, geen crash.

Dit is de stijl waar je in echte Android-code naar streeft.

fun main() {
    val input: String? = null
    val result = input?.trim()?.uppercase() ?: "N/A"
    println(result)  // prints: N/A
}

Best practices

Geef de voorkeur aan niet-nulltypen, handel null af aan grenzen met Elvis en gebruik ?.let voor optionele acties. Bewaar !! voor de zeldzame gevallen waarin null onmogelijk is.

Als je deze gewoonten volgt, behoren NullPointerExceptions tot het verleden.

val safe = data?.value ?: default
data?.let { handle(it) }

Korte controle

Test je begrip van het voorkomen van NullPointerExceptions.

Samenvatting

NPE's in Kotlin ontstaan meestal door !!, platformtypen uit Java of niet-geïnitialiseerde lateinit-waarden. Vermijd ze door de voorkeur te geven aan niet-nulltypen en veilige operators.

Gebruik ?., ?:, ?.let en validatie zoals requireNotNull om code crashvrij te houden. Je hebt nu de basis van nullveiligheid in Kotlin afgerond.

Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
36
Lessen
152

Veelgestelde vragen

Is de les “NullPointerExceptions voorkomen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “NullPointerExceptions voorkomen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 4 lessen.

Wat leer ik in “NullPointerExceptions voorkomen”?

Patronen voor veilige code. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Android Academy te beginnen?

Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “NullPointerExceptions voorkomen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Android Academy?

Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Nullable versus non-nulltypen
  2. Veilige aanroepen en Elvis
  3. let, also en scopefuncties
  4. NullPointerExceptions voorkomen
← Terug naar Android Academy