Option et nullable : quand utiliser chacun
Comparez le type Option d’Arrow aux types nullable de Kotlin et choisissez la solution appropriée.
Option et nullable : quand utiliser chacun 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.
Deux façons de représenter l'absence
Types nullables de Kotlin
Le type T? de Kotlin est le choix idiomatique pour représenter l'absence dans la plupart des codes Kotlin. Le compilateur impose les vérifications de nullité, l'opérateur d'appel sécurisé ?. permet d'enchaîner les appels avec élégance, et ?: "default" fournit des valeurs de repli de manière concise :
val name: String? = findUser(id)?.name
val display = name ?: "Anonymous"Option<A> d'Arrow
Option encapsule le concept de nullité dans un véritable type algébrique doté de map, flatMap, filter, fold, et bien plus encore. Il s'intègre naturellement au style de chaînage fonctionnel d'Arrow :
import arrow.core.Option
import arrow.core.Some
import arrow.core.None
import arrow.core.toOption
val opt: Option<String> = "hello".toOption() // Some("hello")
val absent: Option<String> = NoneConvertir entre Option et type nullable
Convertissez librement : value?.toOption() encapsule une valeur nullable dans Option ; option.getOrNull() extrait la valeur ou renvoie null ; option.getOrElse { default } fournit une valeur de repli :
val opt: Option<String> = nullableString.toOption()
val back: String? = opt.getOrNull()map et flatMap sur Option
map { } transforme une valeur Some et laisse None inchangé. flatMap { } enchaîne des opérations qui renvoient elles-mêmes Option :
val length: Option<Int> = "hello".toOption().map { it.length } // Some(5)
val noneLength: Option<Int> = (null as String?).toOption().map { it.length } // Nonefilter sur Option
filter { predicate } convertit un Some en None si le prédicat est faux :
val positiveAge: Option<Int> = 25.toOption().filter { it > 0 } // Some(25)
val rejectedAge: Option<Int> = (-1).toOption().filter { it > 0 } // Nonefold : utiliser Option
fold(ifEmpty, ifSome) traite les deux cas dans une seule expression, sans appariement de motifs :
val result: String = someOption.fold(
ifEmpty = { "Nothing here" },
ifSome = { value -> "Got: $value" }
)Quand privilégier le type nullable T?
Privilégiez le type nullable de Kotlin (T?) lorsque :
- Vous écrivez du code Kotlin idiomatique que d'autres personnes liront
- Vous avez besoin d'enchaîner des opérateurs sûrs vis-à-vis de null (
?.,?:) - Le type est utilisé dans des API qui n'emploient pas Arrow
- Les performances sont essentielles, car il n'y a pas de surcoût d'encapsulation
Quand privilégier Option<A>
Privilégiez Option lorsque :
- Vous utilisez déjà le chaînage fonctionnel d'Arrow (
map,flatMap) - Vous souhaitez composer des valeurs facultatives avec
EitherouRaise - Vous souhaitez rendre l'absence explicite dans un contexte fonctionnel générique
- Vous créez une bibliothèque dont les appelants peuvent ne pas utiliser Kotlin
Option dans either { }
Dans le bloc either { } d'Arrow, vous pouvez appeler .bind() sur une valeur Option après l'avoir convertie en Either :
fun findUserOpt(id: Long): Option<User> = TODO()
fun getUser(id: Long): Either<UserError, User> = either {
findUserOpt(id)
.toEither { UserError.NotFound }
.bind()
}L’antipattern d’Option
N’utilisez pas Option partout simplement parce qu’il existe. En Kotlin, String? est plus clair que Option dans la plupart des applications. Réservez Option aux situations où ses opérateurs fonctionnels apportent une réelle valeur.
Vérification rapide
Que renvoie None.map { it.length } dans l’Option d’Arrow ?
Récapitulatif : Option et valeurs nullables
Points clés :
- Kotlin
T?: idiomatique dans la plupart des codes, contrôlé par le compilateur, avec?.et?: - Arrow
Option: type algébrique doté d’opérateurs fonctionnels (map,flatMap,fold,filter) - Convertissez les valeurs avec
.toOption()et.getOrNull() - Préférez
T?pour respecter les idiomes de Kotlin, etOptionlorsque vous composez des chaînes de traitement fonctionnelles avec Arrow
Apprends Kotlin avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 51
- Leçons
- 203
Questions Fréquemment Posées
La leçon « Option et nullable : quand utiliser chacun » est-elle gratuite ?
Oui — le texte complet de « Option et nullable : quand utiliser chacun » 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 « Option et nullable : quand utiliser chacun » ?
Comparez le type Option d’Arrow aux types nullable de Kotlin et choisissez la solution appropriée. 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 « Option et nullable : quand utiliser chacun » ?
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.
Toutes les leçons de ce cours
- Either : gestion typée des erreurs sans exceptions
- DSL Raise d’Arrow : composer des erreurs typées
- Option et nullable : quand utiliser chacun
- Modélisation fonctionnelle du domaine avec les types de base d’Arrow