Kotlin Academy · Les

!!-operator: wanneer en waarom u deze beter vermijdt

Begrijp de non-null assertion-operator, de risico's ervan en betere alternatieven.

Les 4 van 413 stappen

!!-operator: wanneer en waarom u deze beter vermijdt is een gratis Kotlin 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 Kotlin Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Kotlin Academy bevat in totaal 4 lessen.

Wat is !!?

De operator voor de niet-nullgarantie !! zet een nullable type om naar een niet-nulltype. Als de waarde tijdens de uitvoering null is, wordt NullPointerException gegenereerd.

Basisgebruik van !!

x!! retourneert x als die niet null is, en genereert anders een NPE.

fun main() {
    val name: String? = "Kotlin"
    val len: Int = name!!.length // 6
    println(len)
}

!! genereert een fout bij null

Als de waarde inderdaad null is, krijg je precies de exceptie die Kotlin probeert te voorkomen.

fun main() {
    val name: String? = null
    try {
        println(name!!.length)
    } catch (e: NullPointerException) {
        println("NPE caught!")
    }
}

Beter: veilige aanroep

Geef in plaats van !! de voorkeur aan ?. — voor een nette afhandeling zonder crashes.

fun main() {
    val name: String? = null
    val len = name?.length
    println(len) // null — no crash
}

Beter: Elvis-operator

Koppel ?. aan ?: om een zinvolle standaardwaarde te bieden.

fun main() {
    val name: String? = null
    val len = name?.length ?: 0
    println(len) // 0
}

Beter: slimme cast

Een controle met if (x != null) maakt een slimme cast mogelijk — !! is niet nodig.

fun main() {
    val name: String? = "Alice"
    if (name != null) {
        println(name.length) // smart-cast to String
    }
}

Beter: requireNotNull

Als de waarde aanwezig moet zijn, genereert requireNotNull(x) { "..." } een betekenisvolle IllegalArgumentException.

fun process(name: String?) {
    val safe = requireNotNull(name) { "name is required" }
    println("processing $safe")
}
fun main() {
    process("Ada")
    // process(null) // throws IllegalArgumentException: name is required
}

Beter: checkNotNull

checkNotNull(x) gedraagt zich hetzelfde, maar genereert IllegalStateException — gebruik dit voor invarianten.

class Service {
    private var data: String? = null
    fun load() { data = "loaded" }
    fun read(): String = checkNotNull(data) { "load() must be called first" }
}
fun main() {
    val s = Service()
    s.load()
    println(s.read())
}

Geldige toepassingen van !!

Zeldzaam maar geldig: wanneer de afwezigheid van null een echte invariant is die tijdens het compileren niet kan worden bewezen (bijvoorbeeld na een reflectieve aanroep). Noteer waarom.

fun main() {
    val list = listOf(1, 2, 3)
    val firstEven: Int = list.find { it % 2 == 0 }!! // safe: we know list has an even
    println(firstEven)
}

!! koppelen — het ultieme antipatroon

Meerdere !!-operatoren in een keten zijn een codegeur. Herstructureer de code met veilige aanroepen en vroege-afhandelingsclausules.

class A(val b: B?)
class B(val c: C?)
class C(val name: String?)
fun main() {
    val a: A? = A(B(C("ok")))
    // BAD: val n = a!!.b!!.c!!.name!!
    val n = a?.b?.c?.name ?: "unknown"
    println(n)
}

!! weg herstructureren

Vervang !! door een eerlijkere API: nullable retourwaarden, requireNotNull bij binnenkomst of een vroege return.

fun firstUpper(s: String?): String? = s?.firstOrNull()?.uppercase()
fun main() {
    println(firstUpper("alice")) // A
    println(firstUpper(""))      // null
    println(firstUpper(null))    // null
}

Korte controle

Wat gebeurt er als je !! toepast op een waarde die tijdens de uitvoering daadwerkelijk null is?

Samenvatting

!! is het ontsnappingsmechanisme waarmee je Kotlin's nullveiligheid omzeilt. Geef de voorkeur aan ?., ?:, slimme casts, requireNotNull of checkNotNull. Gebruik !! alleen voor gedocumenteerde invarianten die de compiler niet kan bewijzen.

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
51
Lessen
203

Veelgestelde vragen

Is de les “!!-operator: wanneer en waarom u deze beter vermijdt” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “!!-operator: wanneer en waarom u deze beter vermijdt”, 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 Kotlin Academy bevat in totaal 4 lessen.

Wat leer ik in “!!-operator: wanneer en waarom u deze beter vermijdt”?

Begrijp de non-null assertion-operator, de risico's ervan en betere alternatieven. Je oefent met Kotlin 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 Kotlin Academy te beginnen?

Ervaring vooraf is niet nodig. Kotlin 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 “!!-operator: wanneer en waarom u deze beter vermijdt”?

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 Kotlin Academy?

Ja. Elke les over Kotlin 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 typen en de ?-modifier
  2. Safe call ?. en Elvis ?: in echte code
  3. let, also en run met nullable receivers
  4. !!-operator: wanneer en waarom u deze beter vermijdt
← Terug naar Kotlin Academy