Opérateur !! en Kotlin : guide complet pour l'utiliser sans casser le code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Kotlin, null et le double point d'exclamation : introduction

\n\n

Avez-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).

\n\n

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.

\n\n

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\n

Le problème résolu par !! : la Null Safety en Kotlin

\n\n

Kotlin 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.

\n\n
var name: String = "Alice"\nname = null // Erreur de compilation !\n
\n\n

Mais 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?.

\n\n
var nullableName: String? = "Bob"\nnullableName = null // Maintenant c'est possible\n
\n\n

Et c'est là que la magie opère. Vous ne pouvez pas simplement appeler une méthode sur une variable nullable :

\n\n
val length = nullableName.length // Erreur ! "Only safe (?.) or non-null asserted (!!.) calls are allowed"\n
\n\n

Kotlin 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.

\n\n

Qu'est-ce que l'opérateur !! (double bang) ?

\n\n

L'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.

\n\n

Syntaxiquement, il se présente comme deux points d'exclamation après la variable :

\n\n
val nonNullValue = nullableValue!!
\n\n

Exemple concret

\n\n

Imaginez 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.

\n\n
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\n

Dans 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\n

Quand utiliser !! (et quand ne surtout pas l'utiliser)

\n\n

L'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\n

Quand on peut (et doit) utiliser !!

\n\n
    \n
  1. 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
  2. \n

Blogs

Book Recommendations