when exhaustif
Couvrir tous les cas
when exhaustif est une leçon Kotlin 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 Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.
Couvrir tous les cas
Un when exhaustif traite chaque valeur possible. Lorsqu’il est utilisé comme expression, Kotlin l’exige afin qu’un résultat soit toujours produit.
Cette leçon montre comment rendre when exhaustif et explique en quoi cela est utile.
La branche par défaut rend le traitement exhaustif
Pour les sujets ouverts comme Int, une branche par défaut couvre tout ce qui n'est pas répertorié.
Cela garantit que when trouve toujours une correspondance.
fun label(n: Int): String = when (n) {
0 -> "zero"
1 -> "one"
else -> "many"
}
fun main() {
println(label(0))
println(label(5))
}Les énumérations permettent l'exhaustivité
Avec une énumération, le compilateur connaît toutes les valeurs possibles. Répertoriez-les toutes et vous pouvez omettre else.
enum class Direction { NORTH, SOUTH, EAST, WEST }
fun turn(d: Direction): String = when (d) {
Direction.NORTH -> "up"
Direction.SOUTH -> "down"
Direction.EAST -> "right"
Direction.WEST -> "left"
}
fun main() {
println(turn(Direction.EAST))
}Valeur d'énumération manquante
Si vous oubliez une valeur d'énumération dans une expression when, le compilateur signale une erreur.
Cela détecte les bogues dès que vous ajoutez une nouvelle constante d'énumération.
enum class Status { ACTIVE, PAUSED, STOPPED }
fun describe(s: Status): String = when (s) {
Status.ACTIVE -> "running"
Status.PAUSED -> "paused"
Status.STOPPED -> "stopped"
}
fun main() {
println(describe(Status.PAUSED))
}Classes scellées
Une classe scellée possède un ensemble fixe de sous-classes connues au moment de la compilation.
Ainsi, when peut couvrir exhaustivement tous les sous-types sans else.
sealed class Shape
class Circle(val r: Double) : Shape()
class Square(val s: Double) : Shape()
fun area(shape: Shape): Double = when (shape) {
is Circle -> 3.14159 * shape.r * shape.r
is Square -> shape.s * shape.s
}
fun main() {
println(area(Square(4.0)))
}Pourquoi l'exhaustivité est utile
Un when exhaustif transforme les cas manquants en erreurs de compilation plutôt qu'en bogues silencieux.
Ajoutez une nouvelle sous-classe ou une nouvelle valeur d'énumération : le compilateur indique chaque expression when que vous devez mettre à jour.
Les instructions n'imposent pas l'exhaustivité
Lorsqu'il est utilisé comme une instruction (sans être affecté), when n'exige pas l'exhaustivité.
Mais pour les énumérations et les types scellés, il est recommandé de couvrir tout de même tous les cas.
enum class Light { RED, GREEN }
fun main() {
val light = Light.RED
when (light) {
Light.RED -> println("stop")
Light.GREEN -> println("go")
}
}Associer classes scellées et données
Les hiérarchies scellées utilisent souvent des sous-classes de données, ce qui vous offre à la fois une correspondance exhaustive et des conversions de type intelligentes pour accéder aux propriétés.
sealed class Result
data class Ok(val value: Int) : Result()
data class Err(val message: String) : Result()
fun show(r: Result): String = when (r) {
is Ok -> "ok: " + r.value
is Err -> "error: " + r.message
}
fun main() {
println(show(Ok(42)))
println(show(Err("boom")))
}La branche par défaut comme filet de sécurité
Vous pouvez toujours ajouter else à une expression when utilisant une énumération ou un type scellé, mais le compilateur cesse alors de signaler les nouveaux cas.
Omettre else préserve la sécurité à la compilation ; préférez donc cette solution pour les types fermés.
enum class Coin { HEADS, TAILS }
fun flip(c: Coin): Int = when (c) {
Coin.HEADS -> 1
Coin.TAILS -> 0
}
fun main() {
println(flip(Coin.HEADS))
}Booléens et sujets fermés
Un Boolean ne possède que deux valeurs ; les répertorier toutes les deux rend when exhaustif sans else.
fun yesNo(flag: Boolean): String = when (flag) {
true -> "yes"
false -> "no"
}
fun main() {
println(yesNo(true))
println(yesNo(false))
}Tout rassembler
Un when exhaustif signifie que tous les cas sont couverts :
elsecouvre les sujets ouverts commeInt- Les énumérations, les classes scellées et
Booleanpeuvent être exhaustifs sanselse - Le compilateur signale les cas manquants lorsque vous en ajoutez de nouveaux
sealed class Event
object Start : Event()
object Stop : Event()
fun handle(e: Event): String = when (e) {
is Start -> "starting"
is Stop -> "stopping"
}
fun main() {
println(handle(Start))
println(handle(Stop))
}Vérification rapide
Vérifiez votre compréhension de l'exhaustivité de when.
Récapitulatif
Vous avez appris à rendre when exhaustif :
elsegère les sujets ouverts- Les énumérations, les classes scellées et
Booleanpeuvent être entièrement couverts - Les vérifications à la compilation détectent les cas manquants
Le cours sur les expressions When et les conversions de type intelligentes est terminé.
Questions Fréquemment Posées
La leçon « when exhaustif » est-elle gratuite ?
Oui — le texte complet de « when exhaustif » 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 « when exhaustif » ?
Couvrir tous les cas 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 4 sur 4.
Combien de temps prend la leçon « when exhaustif » ?
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.