web-dev-qa-db-ja.com

「if ... else if」ステートメントの最後の「else」句が必要ですか?

私が見たすべてのif...else ifの例には、最後のelse句が含まれています。

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

これは基本的に、ネストされたif...elseステートメントの構文糖衣であることを理解しています。

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

最後のelse句を省くif...else ifの例を見たことがありません。しかし、単純なifステートメント(else節なし)が有効であり、上記の同等の「ネストされたステートメント」を見ると、これは大丈夫だと私は言っています:

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

誰かが私に、それが有効であるかどうかを明示的に示すリソースまたは例を教えてもらえますか?

また、別のレベルで、それがis有効である場合、推奨されるか、または「悪い習慣」と見なされますか?

14
chharvey

末尾のelseは必須ではありません。必要かどうかは、何を達成したいかによって異なります。

末尾のelse句は、指定された条件のいずれも真でない場合に実行されます。条件が 集合的に網羅 であることが保証されている場合、else句は完全に不要です。ただし、「不可能」な条件をキャッチするアサーションが含まれている可能性があります。あなたの場合、else節が必要かどうかは、condition1condition2、およびcondition3は本当です。

anyelseステートメントでは、ifを省略できます。最後のifには特別なものはありませんif/else if 鎖。これは、JavaScriptの文法で文書化されています。 in 仕様

9
user4815162342

needelse句を使用しないでください。 (必要でないものの例を提供するのは難しいので、私はそれをそのままにしておきます。)

編集コメントとして、言語構文表記の角括弧通常は何かがオプションであることを示します。

10
Pointy

100%有効です。いいえ、悪い習慣ではありません。必要なければ、書きません。

例として次をご覧ください。

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

Elseブロックは不要です。ifelseステートメントではなく、ifステートメントです。 else、elseifを拡張機能として検討してください。

これがサイトポイントスレッドへのリンクです。 クリックしてください 。また、stackoverflowの同様のスレッド: ここをクリック

2
Ivan