web-dev-qa-db-fra.com

Ai-je besoin d'une dernière clause `else` dans une instruction` if ... else if`?

Chaque exemple de if...else if Que j'ai vu comprend une dernière clause else:

if (condition1) {
  doA();
} else if (condition2) {
  doB();
} else if (condition3) {
  doC();
} else {
  noConditionsMet();
}
alwaysDoThis();

Je comprends qu'il s'agit essentiellement de sucre syntaxique pour les instructions imbriquées if...else:

if (condition1) {
  doA();
} else {
  if (condition2) {
    doB();
  } else {
    if (condition3) {
      doC();
    } else {
      noConditionsMet();
    }
  }
}
alwaysDoThis();

Je n'ai jamais vu d'exemples de if...else if Qui omet la dernière clause else. Mais vu que les instructions if simples (sans les clauses else) sont valides, et en suivant les "instructions imbriquées" équivalentes ci-dessus, mon instinct me dit que c'est correct de le faire:

if (condition1) {
  doA();
} else if (condition2) {
  doB();
} else if (condition3) {
  doC();
}
alwaysDoThis();

Quelqu'un peut-il m'indiquer une ressource ou un exemple qui dit explicitement si elle est valide ou non?

Et à un autre niveau, si elle est valide, serait-elle recommandée ou est-elle considérée comme une "mauvaise pratique"?

14
chharvey

La fin else n'est pas obligatoire. Quant à savoir si cela est nécessaire, cela dépend de ce que vous voulez réaliser.

La clause de fin else s'exécute lorsqu'aucune des conditions spécifiées n'est vraie. Si les conditions sont garanties collectivement exhaustives , alors une clause else est entièrement superflue, sauf éventuellement pour contenir une assertion qui attrape la condition "impossible". Dans votre cas, si vous avez besoin d'une clause else dépend de si vous voulez que du code spécifique s'exécute si et seulement si ni condition1, condition2, et condition3 sont vrai.

else peut être omis pour toute instruction if, il n'y a rien de spécial dans la dernière if d'un if/else if chaîne. Ceci est documenté dans n'importe quelle grammaire JavaScript, par ex. dans la spécification .

9
user4815162342

Vous n'avez jamais besoin d'une clause else. (Il est difficile de donner des exemples de quelque chose qui n'est pas nécessaire, alors je vais m'en tenir là.)

modifier en tant que notes de commentaire, les crochets dans la notation de la syntaxe du langage indiquent généralement que quelque chose est facultatif.

10
Pointy

C'est 100% valide. Non, ce n'est pas une mauvaise pratique. Si vous n'en avez pas besoin, ne l'écrivez pas.

Prenez l'exemple suivant:

function doStuff(data) {
    if (data.something) {
        // go format the data in some way
    }
    else if (data.somethingElse) {
        // go format the data in some other way
    }
    // must be formatted correctly, don't do anything else
    ...
}
9
KevBot

Pas besoin d'un bloc else, ce ne sont pas des instructions if, mais des instructions if. Considérez else, elseif comme une extension.

Voici un lien vers un fil de discussion de sitepoint: cliquez ici . Et un fil similaire sur stackoverflow: cliquez ici

2
Ivan