Kotlin, null et le double point d'exclamation : introduction
\n\nAvez-vous déjà écrit du code en Kotlin, vu le compilateur vous reprocher un potentiel null, et placé deux points d'exclamation — !! — pour passer à autre chose ? Si oui, vous connaissez déjà le héros de cet article : l'opérateur double bang (aussi appelé opérateur !! en Kotlin).
Ce symbole est à la fois un sauveur et un outil dangereux. Il dit au compilateur : « Tais-toi, je sais ce que je fais, cette variable n'est certainement pas null ». Mais si vous vous trompez, l'application plantera avec une NullPointerException. Ça fait peur ? En réalité, c'est un mécanisme puissant qu'il faut comprendre et utiliser avec sagesse.
Dans ce guide, nous allons voir ce qu'est le double bang Kotlin, comment il fonctionne, où l'utiliser, et surtout où chercher des alternatives. Vous apprendrez à ne pas vous tirer une balle dans le pied et à écrire du code fiable.
\n\nLe problème résolu par !! : la Null Safety en Kotlin
\n\nKotlin a été conçu pour éliminer les NullPointerException (NPE). Et il a presque réussi. En Kotlin, les types ne peuvent pas être null par défaut. Vous ne pouvez tout simplement pas assigner null à une variable de type String — le compilateur vous l'interdit.
var name: String = "Alice"\nname = null // Erreur de compilation !\n\n\nMais le monde réel est plein d'incertitudes. Les données viennent de la base, de l'utilisateur, du réseau. C'est pourquoi Kotlin a introduit les types nullable — des types qui peuvent être null. Ils sont indiqués par un point d'interrogation : String?.
var nullableName: String? = "Bob"\nnullableName = null // Maintenant c'est possible\n\n\nEt c'est là que la magie opère. Vous ne pouvez pas simplement appeler une méthode sur une variable nullable :
\n\nval length = nullableName.length // Erreur ! "Only safe (?.) or non-null asserted (!!.) calls are allowed"\n\n\nKotlin vous oblige à gérer le null. C'est génial — vous n'oubliez jamais de vérifier. Mais parfois, vous savez avec certitude que la valeur n'est pas null. Et c'est là qu'intervient l'opérateur double point d'exclamation Kotlin.
Qu'est-ce que l'opérateur !! (double bang) ?
\n\nL'opérateur !! en Kotlin est un opérateur d'assertion non null forcée. Il prend une valeur nullable et la convertit en un type non null. Si la valeur s'avère être null, une KotlinNullPointerException est levée.
Syntaxiquement, il se présente comme deux points d'exclamation après la variable :
\n\nval nonNullValue = nullableValue!!\n\nExemple concret
\n\nImaginez une fonction qui recherche un utilisateur par son ID. Elle retourne User?, car l'utilisateur peut ne pas exister. Mais vous savez pertinemment que dans votre environnement de test, l'utilisateur avec l'ID 1 existe.
data class User(val name: String)\n\nfun findUser(id: Int): User? {\n // Logique de recherche\n return if (id == 1) User("Anna") else null\n}\n\nfun main() {\n val user = findUser(1)\n // Nous sommes certains que user n'est pas null\n val userName = user!!.name\n println(userName) // Affiche : Anna\n}\n\n\nDans cet exemple, le double bang Kotlin a fonctionné correctement et nous avons obtenu le nom. Mais si l'ID avait été 2, l'application aurait planté avec une exception.
\n\nQuand utiliser !! (et quand ne surtout pas l'utiliser)
\n\nL'opérateur !! (double bang) est comme un bouton rouge. On peut appuyer dessus, mais seulement si on est sûr à 146%. Passons en revue les scénarios légitimes.
\n\nQuand on peut (et doit) utiliser !!
\n\n- \n
- Interaction avec du code Java. Java ne connaît pas les annotations nullable. Si une méthode Java retourne un objet, Kotlin le voit comme un
Platform Type(ex :String!). Vous pouvez le manipuler comme vous voulez. Mais e \n