Sobes.tech
Junior

Explique ce qu'est la sécurité nulle dans le langage Kotlin.

sobes.tech IA

Réponse de l'IA

La sécurité nulle — c'est une fonctionnalité du langage Kotlin qui empêche les erreurs liées aux références null. Elle est réalisée en créant deux types de références : nullable (qui permet null) et non-nullable (qui ne permet pas null).

Les types non-nullables sont déclarés comme d'habitude :

var nonNullableString: String = "Hello" // Ne peut pas être null

Les types nullable sont déclarés en utilisant le symbole ? après le nom du type :

var nullableString: String? = "Hello" // Peut être null
nullableString = null

Kotlin exige une gestion explicite des types nullable, évitant d'accéder directement à leurs membres sans vérification préalable de null. Pour cela, il fournit les mécanismes suivants :

  1. Opérateur d'appel sécurisé (?.) : Appelle une méthode ou accède à une propriété uniquement si l'objet n'est pas null. Sinon, retourne null.

    val length = nullableString?.length // length sera Int? ou null
    
  2. Opérateur Elvis (?:) : Fournit une valeur par défaut si l'expression à gauche de l'opérateur est null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength sera Int, 0 si nullableString est null
    
  3. Opérateur de assertion de non-null (!!) : Convertit un type nullable en non-nullable. Si la valeur est null, une exception NullPointerException est levée. Utilisé lorsque le développeur est sûr que la valeur n'est pas null.

    val sureLength = nullableString!!.length // Lancerait NullPointerException si nullableString est null
    
  4. Vérifications avec if : Vérification traditionnelle de null avec if. Le compilateur effectue une conversion intelligente (smart cast) du type nullable en non-nullable à l'intérieur du bloc if, si la vérification passe.

    if (nullableString != null) {
        val length = nullableString.length // Ici nullableString est traité comme String
    }
    

Ces mécanismes permettent de gérer explicitement les situations où une variable peut être null, réduisant considérablement la probabilité d'une NullPointerException à l'exécution.