For...else en JavaScript
Par Romain GuillemotPublié le
Un pattern courant lors de l’utilisation d’une boucle for
est de la combiner avec une instruction else
.
Ceci est possible dans de nombreux moteurs de templates, tels que Twig, comme dans l’exemple ci-dessous :
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
</ul>
Pourtant, dans les langages de programmation comme JavaScript, la construction for...else
n’existe pas :
for (const user of users) {
console.log(user.username);
} else { // ❌ ça ne marche pas
console.log("aucun utilisateur trouvé");
}
Le mot-clé else
ne fonctionne qu’en combinaison avec le mot-clé if
. C’est une limite, mais aussi une solution :
if (users.length > 0) {
console.log("aucun utilisateur trouvé");
} else {
for (const user of users) {
console.log(user.username);
}
}
“Inverser” la logique nous permet d’approcher du pattern for...else
. Au lieu d’écrire d’abord la boucle puis le else
, nous vérifions d’abord le cas “aucun utilisateur”, pour finir dans la boucle après le else
. Ici, le bloc else
ne contient qu’une seule instruction : l’instruction for
. Nous pouvons supprimer quelques accolades et raccourcir le code :
if (users.length > 0) {
console.log("aucun utilisateur trouvé");
} else for (const user of users) {
console.log(user.username);
}
C’est ce que j’ai trouvé de plus proche d’un pattern for...else
en JavaScript. Qu’en penses-vous ? Est-ce que vous voyez une autre approche ?