Éviter les NullPointerExceptions
Schémas pour un code sûr.
Éviter les NullPointerExceptions est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 4 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 Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.
Objectif : aucun NPE
Une NullPointerException, ou NPE, se produit lorsque le code utilise quelque chose qui est en réalité null. Kotlin est conçu pour rendre ces erreurs rares.
Cette leçon rassemble les outils que vous avez appris et présente les quelques façons dont un NPE peut encore se produire.
L'opérateur !!
L'affirmation de non-nullité !! indique au compilateur de vous faire confiance lorsque vous affirmez qu'une valeur n'est pas null. Si vous vous trompez, une NPE est déclenchée.
Elle supprime la sécurité ; utilisez-la donc rarement, et uniquement lorsque vous en êtes certain.
fun main() {
val name: String? = "Ada"
println(name!!.length) // works, name is not null
}!! peut provoquer un plantage
Si la valeur est réellement null, !! déclenche une NullPointerException à cette ligne précise.
C'est le principal moyen de réintroduire le problème même que Kotlin cherche à éviter. Évitez !! lorsqu'un appel sécurisé ou l'opérateur Elvis ferait l'affaire.
val name: String? = null
println(name!!.length)
// throws KotlinNullPointerExceptionPrivilégier les solutions sûres
Presque toute utilisation de !! peut être réécrite avec ?. et ?:. La version sûre ne peut pas provoquer de plantage.
Comparez ci-dessous les formes risquée et sûre.
// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0Valider dès le début
Gérez null à la frontière de votre code, puis travaillez avec des valeurs non nulles à l'intérieur. Utilisez l'opérateur Elvis avec return ou throw pour rejeter immédiatement une entrée manquante.
Après cette vérification, la valeur est automatiquement considérée comme non nulle.
fun length(s: String?): Int {
val text = s ?: return 0
return text.length
}requireNotNull
Lorsqu'une valeur null indique réellement un défaut, requireNotNull déclenche une erreur explicite et renvoie la valeur non nulle.
C'est plus explicite que !!, car vous pouvez ajouter un message.
fun start(config: String?) {
val c = requireNotNull(config) { "config missing" }
println(c.length)
}Types de plateforme provenant de Java
Les valeurs provenant de Java ont une nullabilité inconnue ; on les appelle des types de plateforme. Kotlin ne peut pas garantir qu'elles ne sont pas nulles.
Lorsque vous utilisez des bibliothèques Java, déclarez explicitement le type attendu et gérez null par précaution.
// From Java: String maybe = obj.getName();
val name: String? = obj.name // be safe
println(name?.length ?: 0)Piège de lateinit
Une lateinit var permet de retarder l'initialisation d'une propriété non nulle. Mais l'utiliser avant son affectation déclenche une exception.
Utilisez lateinit uniquement lorsque vous êtes certain que la valeur sera définie avant tout accès.
lateinit var config: String
fun read() {
println(config.length)
// crashes if config was never set
}Des valeurs par défaut plutôt que null
Souvent, vous pouvez éviter complètement la nullabilité en choisissant une valeur par défaut pertinente. Une chaîne vide ou une liste vide est fréquemment préférable à null.
Moins de types pouvant être nuls signifie moins de risques de NPE.
fun main() {
val tags: List<String> = emptyList()
println(tags.size) // 0, never null
}Une chaîne de traitement sûre
Ce programme lit une valeur facultative, la transforme en toute sécurité et produit toujours un résultat. Ni !!, ni plantage.
C'est le style à viser dans le véritable code Android.
fun main() {
val input: String? = null
val result = input?.trim()?.uppercase() ?: "N/A"
println(result) // prints: N/A
}Bonnes pratiques
Privilégiez les types non nuls, gérez null aux frontières avec l'opérateur Elvis et utilisez ?.let pour les actions facultatives. Réservez !! aux rares cas où null est impossible.
En suivant ces habitudes, les NullPointerExceptions appartiendront au passé.
val safe = data?.value ?: default
data?.let { handle(it) }Vérification rapide
Testez votre compréhension de la prévention des NullPointerExceptions.
Récapitulatif
Les NPE dans Kotlin proviennent généralement de !!, des types de plateforme provenant de Java ou de valeurs lateinit non initialisées. Évitez-les en privilégiant les types non nuls et les opérateurs sûrs.
Utilisez ?., ?:, ?.let et une validation telle que requireNotNull pour que le code ne puisse pas provoquer de plantage. Vous avez maintenant terminé l'essentiel de la gestion sûre de null en Kotlin.
Questions Fréquemment Posées
La leçon « Éviter les NullPointerExceptions » est-elle gratuite ?
Oui — le texte complet de « Éviter les NullPointerExceptions » 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 Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Éviter les NullPointerExceptions » ?
Schémas pour un code sûr. Tu pratiques Android 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 Android Academy ?
Aucune expérience préalable n'est requise. Android 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 4 sur 4.
Combien de temps prend la leçon « Éviter les NullPointerExceptions » ?
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 Android Academy ?
Oui. Chaque leçon Android 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.
Toutes les leçons de ce cours
- Types pouvant être nuls ou non nuls
- Appels sûrs et opérateur Elvis
- Fonctions let, also et de portée
- Éviter les NullPointerExceptions