Opérateur conditionnel ternaire de Kotlin

1. Vue d'ensemble

En bref, il n'y a pas d'opérateur ternaire à Kotlin . Cependant, l'utilisation d' expressions si et quand permet de combler cette lacune.

Dans ce didacticiel, nous examinerons différentes manières d'imiter l'opérateur ternaire.

2. expressions si et quand

Contrairement à d'autres langues, si et quand en Kotlin sont des expressions. Le résultat d'une telle expression peut être affecté à une variable .

En utilisant ce fait, si et quand peuvent être remplacés à leur manière par l'opérateur ternaire.

2.1. Utiliser if-else

Jetons un coup d'œil à l'utilisation de l' expression if pour imiter l'opérateur ternaire:

val result = if (a) "yes" else "no"

Dans l'expression ci-dessus, si a est défini sur true , notre variable de résultat est définie sur yes . Sinon, il est réglé sur non .

Il est à noter que le type de résultat dépend de l'expression sur le côté droit . En général, le type est Any . Par exemple, si le côté droit a un type booléen , le résultat sera également booléen :

val result: Boolean = if (a == b) true else false

2.2. Utilisation quand

Nous pouvons également utiliser une expression when pour créer un opérateur pseudo-ternaire:

val result = when(a) {   true -> "yes"   false -> "no" }

Le code est simple, direct et facile à lire. Si a est vrai , attribuez au résultat la valeur oui . Sinon, attribuez-le à no .

2.3. Opérateur Elvis

Parfois, nous utilisons des expressions if pour extraire une valeur lorsqu'elle n'est pas nulle ou pour en renvoyer une par défaut lorsqu'elle est nulle :

val a: String? = null val result = if (a != null) a else "Default"

Il est également possible de faire de même avec les expressions when :

val result = when(a) { null -> "Default" else -> a }

Comme il s'agit d'un modèle si commun, Kotlin a un opérateur spécial pour cela:

val result = a ?: "Default"

Le ?: Est connu comme l'opérateur Elvis. Il renvoie l'opérande s'il n'est pas nul . Sinon, il retournera la valeur par défaut spécifiée à droite de l' opérateur ?: .

2.4. DSL

Il y a certainement une tentation de créer un DSL qui imite un opérateur ternaire. Mais les restrictions linguistiques de Kotlin sont trop strictes pour permettre une reproduction à 100% de la syntaxe ternaire traditionnelle.

En tant que tel, évitons cette tentation et utilisons simplement l'une des solutions mentionnées précédemment.

3. Conclusion

Bien que Kotlin n'ait pas d'opérateur ternaire, il existe des alternatives que nous pouvons utiliser - si et quand . Ce ne sont pas un sucre syntaxique, mais des expressions complètes, comme nous l'avons vu précédemment.

Comme toujours, le code est disponible sur sur GitHub.