L’opérateur !!
Forcer la non-nullité et comprendre ses risques
L’opérateur !! est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.
Forcer les valeurs non nulles
Il vous arrive d’être certain qu’une valeur pouvant être nulle ne l’est pas, alors que le compilateur signale toujours une erreur.
L’opérateur d’assertion de non-nullité !! indique au compilateur de vous faire confiance et de traiter la valeur comme non nulle.
Utilisation de base
Ajouter !! convertit un type pouvant être nul en son équivalent non nul.
Si la valeur est réellement non nulle, le code fonctionne exactement comme lors d’un appel normal.
fun main() {
val name: String? = "Kotlin"
println(name!!.length)
}Le danger
Si la valeur est en réalité null, !! lève une NullPointerException à cet endroit précis.
C’est le seul cas où Kotlin vous permet de provoquer un NPE, et cela relève entièrement de votre responsabilité.
fun main() {
val name: String? = null
try {
println(name!!.length)
} catch (e: NullPointerException) {
println("Boom: NullPointerException")
}
}Pourquoi cet opérateur existe
L’opérateur est volontairement peu esthétique. Deux points d’exclamation se remarquent lors de la revue du code et signalent un endroit où vous avez contourné le filet de sécurité.
Il existe dans les rares cas où vous en savez réellement plus que le compilateur.
L’appel sécurisé est généralement préférable
Dans la plupart des situations, un appel sécurisé ?. associé à Elvis ?: est plus sûr et tout aussi court.
Comparez ci-dessous les deux approches pour atteindre le même objectif.
fun main() {
val name: String? = null
val safeLength = name?.length ?: 0
println(safeLength)
}Éviter de chaîner les !!
Ne chaînez jamais plusieurs !! comme dans a!!.b!!.c. En cas de plantage, vous ne pourrez pas savoir quelle partie était nulle.
Décomposez l’expression ou utilisez plutôt des appels sécurisés.
fun main() {
val text: String? = "hi"
// bad style: text!!.uppercase()!! is hard to debug
val good = text?.uppercase() ?: ""
println(good)
}Un cas d’utilisation légitime
Un cas acceptable : une valeur que vous avez définie précédemment et dont vous savez qu’elle est maintenant initialisée.
Même dans ce cas, préférez lateinit ou une restructuration lorsque c’est possible.
fun main() {
var config: String? = null
config = "loaded"
// we just assigned it, so !! is safe here
println(config!!.uppercase())
}Lire la trace de la pile
Lorsque !! échoue, l’exception indique la ligne exacte. Cette précision est son seul avantage par rapport à un résultat erroné et silencieux.
Utilisez le message pour trouver et corriger l’hypothèse qui était fausse.
fun length(text: String?): Int {
return text!!.length
}
fun main() {
println(length("abc"))
// length(null) would throw on the !! line
}Supprimer les !!
La plupart des !! peuvent être supprimés en traitant correctement les valeurs nulles. Ci-dessous, une valeur de secours fournie par Elvis rend la fonction totale et exempte de plantage.
fun length(text: String?): Int {
return text?.length ?: 0
}
fun main() {
println(length("abc"))
println(length(null))
}Règle générale
Considérez chaque !! comme une question : suis-je absolument certain que cette valeur ne sera jamais nulle ?
- Si oui et que le cas est rare → c’est acceptable
- Si vous avez un doute → utilisez
?.et?:
Assembler le tout
L’opérateur !! est un outil à manier avec précaution :
- Il force une valeur pouvant être nulle à prendre un type non nul
- Il lève une NullPointerException si la valeur est nulle
- Préférez les appels sécurisés et Elvis dans presque tous les cas
fun main() {
val sure: String? = "definitely here"
println(sure!!.length)
val maybe: String? = null
println(maybe?.length ?: -1)
}Vérification rapide
Vérifiez votre compréhension de l’opérateur d’assertion de non-nullité.
Récapitulatif
Vous avez découvert l’opérateur !! :
- Il affirme qu’une valeur pouvant être nulle ne l’est pas
- Il lève une NullPointerException lorsque cette affirmation est fausse
- Il doit rester une solution de dernier recours, et non devenir une habitude
Vous découvrirez ensuite comment la nullabilité arrive depuis Java par l’intermédiaire des types de plateforme.
Questions Fréquemment Posées
La leçon « L’opérateur !! » est-elle gratuite ?
Oui — le texte complet de « L’opérateur !! » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « L’opérateur !! » ?
Forcer la non-nullité et comprendre ses risques Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Kotlin Academy ?
Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « L’opérateur !! » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?
Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.