!!-operator: wanneer en waarom u deze beter vermijdt
Begrijp de non-null assertion-operator, de risico's ervan en betere alternatieven.
!!-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.
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
- Nullable typen en de ?-modifier
- Safe call ?. en Elvis ?: in echte code
- let, also en run met nullable receivers
- !!-operator: wanneer en waarom u deze beter vermijdt