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については書かれておらず、ifelseの定義しかありません。

elseの中身をブロックではなくifステートメントで書いたもの、それがelse ifの正体です。

まとめ

Javascriptにおいて、else ifの定義は存在せず、ifelseのみです。else ifは、elseの中身にifステートメントを入れたものです。他の言語でも同様のものが多いと思います。ただ、elseifelifのようなものは定義があると思います。

役に立ったらシェアしよう!