JavaScript if else en une ligne (et autres conditions)
En JavaScript, on peut utilise les expressions if-else en une seule ligne.
On peut tester nos conditions avec l’opérateur ternaires ou d’autres opérateurs ES6+.
condition ? expression_si_vrai : expression_si_faux
Prenons un exemples concret :
const age = 42
const groupe = age < 18 ? "Mineur" : "Majeur"
L’opérateur ternaire conditionnel - condition en une ligne
Prenons un bout de code simple avec l’instruction if…else de base :
const age = 42
if (age < 18) {
console.log("Mineur")
} else {
console.log("Majeur")
}
Dans notre code, on a une variable age
qui contient l’age d’une personne.
On test la valeur de notre variable contre la valeur 18
, puis on affiche "Mineur"
ou "Majeur"
en fonction.
Dans notre exemple, c’est la valeur "Majeur"
qui sera affichée dans la console, comme 42
est plus grand que 18
.
Ce code fonctionne très bien, mais on peut le rendre plus court et plus lisible avec un l’opérateur conditionnel (ternaire) :
const age = 42
console.log(age < 18 ? "Mineur" : "Majeur")
La suite de symboles ? :
s’appelle l’opérateur conditionnel.
La structure condition ? expression_si_vrai : expression_si_faux
est communément appelée une ternaire pas les développeurs.
Imbriquer if else en une ligne
Il n’y a pas de limites d’imbrication dans l’utilisation des ternaires avec l’opérateur conditionnel.
Prenons une suite de conditions if…else if…else pour obtenir la mention d’un élève à partir d’une moyenne :
const note_moyenne = 14
if (moyenne >= 16.0) {
console.log("Mention Très Bien")
} else if (moyenne >= 14.0) {
console.log("Mention Bien")
} else if (moyenne >= 12.0) {
console.log("Mention Assez Bien")
} else {
console.log("Pas de mention")
}
On peut choisir de prendre toutes ces conditions et de les mettre en une seule ligne, dans plusieurs ternaires imbriquées :
const note_moyenne = 14
console.log(moyenne >= 16.0 ? "Mention Très Bien" : moyenne >= 14.0 ? "Mention Bien" : moyenne >= 12.0 ? "Mention Assez Bien" : "Pas de mention")
Le résultat est très difficile à lire 🤮
Ok, on a économisé 9 lignes par rapport à notre ancien bloc de code, mais c’est complètement illisible.
Quand on code, on doit toujours penser aux autres personnes qui vont lire notre code, ou à notre “nous du futur” qui aura oublié ce qu’on a codé dans le passé.
On préférera pratiquement toujours la lisibilité à un code court.
Ternaire en plusieurs lignes
On peut aussi écrire une série de ternaires sur plusieurs lignes.
Ce sera plus lisible que toutes les avoir en une seule ligne.
Et si c’est 2-3 conditions maximum, ça peut même simplifier le code.
condition
? expression_si_vrai
: autre_condition_si_faux
? expression_si_vrai
: expression_si_faux
Par exemple, gardons notre exemple de mentions à partir de note moyenne :
const note_moyenne = 14
console.log(
moyenne >= 16.0
? "Mention Très Bien"
: moyenne >= 14.0
? "Mention Bien"
: moyenne >= 12.0
? "Mention Assez Bien"
: "Pas de mention"
)
On voir qu’on a 3 ternaires imbriquées et c’est relativement lisible.
Mais je préfère quand même la version plus verbose avec les instructions if else de base. 🤷♂️
Bonus : L’opérateur &&
Parfois, on n’a pas besoin d’expression si la condition est fausse.
L’opérateur “et logique” &&
en une ligne permet de tester la valeur d’une condition. Si la condition est true, elle renverra l’expression qui suit &&
, sinon elle renverra le résultat de l’evaluation de ce qui précède &&
.
On utilise l’opérateur &&
dans ces cas là .
condition && expression
Renverra le résultat de expression
si condition
est vraie (Truthy).
Ou condition
sans exécuter expression
si consition
est fausse (Falsy).
💡 Falsy est tout ce que JavaScript évalue comme faux :
0
,null
,undefined
,''
,false
etcTruthy c’est tout ce qui est évalué vrai.
Pour tester si une valeur est Truthy ou Falsy, vous pouvez la faire suivre des opérateurs !!
console.log(!!ma_variable)
Sans l’opérateur &&
, on pourrait avoir un code qui ressemble à ceci :
const ma_variable = true
const res = ma_variable ? "C'est vrai !" : null
Le double opérateur &&
nous permet de laisser tomber l’expression fausse de notre ternaire, ici null
:
const ma_variable = true
const res = ma_variable && "C'est vrai !"
Dans les deux cas, console.log(res)
affichera "C'est vrai !"
dans notre cas.
Si ma_variable
était false
, on aurait null
dans le premier cas et false
dans le deuxième.
On utilise souvent cet opérateur en ReactJS quand on test le contenu d’une variable dans une expression :
{ma_variable && <div>{ma_variable}</div>}
Cette structure permet de n’afficher la div
avec ma_variable
que cette dernière n’est pas vide.
⚠️ Attention cependant, il ne faut pas oublier que
0
est évalué àfalse
et des fois, en React, on veut afficher les 0.Dans les cas où on peut recevoir des 0, on préféra la ternaire avec une bonne condition, ou un meilleur test pour
ma_variable
.
Conclusion
On a vu ensemble comment utiliser l’opérateur conditionnel ? :
pour faire des conditions ternaires en une ligne.
On a aussi vu comment faire plusieurs ternaires imbriquées.
Et même comment utiliser l’opérateur &&
en une ligne pour simplifier nos conditions ternaires en une seule ligne !
a ? b : c
a ? b : c ? d : e
a && b
Même si utiliser &&
en une ligne peut avoir l’air plus lisible, n’oubliez pas de favoriser la lisibilité plutôt qu’un code plus court.
Je m'appelle Thomas, et je code depuis plus de 20 ans. Depuis ma sortie de la première promotion de l'École 42, j'ai conçu et développé des centaines d'applications et de sites web. Sur ce blog, je partage avec vous les stratégies les plus efficaces pour maîtriser l'art de coder et progresser rapidement.