else ifは仕様上存在しない
仕様上、else if
が存在しないということはどういうことでしょうか?
この記事はJavascript前提ですが、他の多くの言語でも同様のことが言えます。
波括弧の省略とステートメント
if文やfor文で、中身が1行であれば括弧を省略できることはご存知だと思います。
const x = [1, 2, 3]; for (const v of x) console.log(v);
この1行は、ステートメントが1つということです。x + 5;
の1行も式というステートメントです。ブロックはステートメントの1つのため、このような書き方ができます。
const x = [1, 2, 3]; for (const v of x) { let v2 = v + 10; console.log(v2); }
複数行なら波括弧をつけるというのは、複数行のプログラム (複数のステートメント) を1つのブロックに格納する (1つのステートメントにまとめる) という行為です。
例はforですが、ifでも同じ定義です。
ステートメントの種類
細かい種類はECMAScriptの仕様書にありますが、for文、if文などもステートメントの1つです。
つまり、forの中の1行としてif全体を書く、といったことができます。
const x = [1, 2, 3]; for (const v of x) if (v % 2) console.log(v + " is Odd");
else ifの実態
これを元としてelse ifとはなんぞやを考えると、else
の中にif statementがある、ということになります。
つまり、
if (1) { /*...*/ } else if (2) { /*...*/ } else if (3) { /*...*/ }
は、実質
if (1) { } else { if (2) { /*...*/ } else { if (3) { /*...*/ } } }
の波括弧を省略した書き方と言えるわけです。
実際、ECMAScriptの仕様書を見ると、else if
については書かれておらず、if
とelse
の定義しかありません。
elseの中身をブロックではなくifステートメントで書いたもの、それがelse if
の正体です。
まとめ
Javascriptにおいて、else if
の定義は存在せず、if
とelse
のみです。else if
は、elseの中身にifステートメントを入れたものです。他の言語でも同様のものが多いと思います。ただ、elseif
やelif
のようなものは定義があると思います。