「else if」文は存在しない【美しきプログラミング言語の世界】

C言語由来の多くの言語には「elif, elseif」というステートメントはあっても「else if」というステートメントは存在しないはずである。C言語由来のif文は、わざわざ「else if」という文脈を特別に解釈する必要がないよう上手くできているためである。

各言語はC言語から受け継ぐ極めてミニマルな複数の言語仕様の組み合わせによって、事実上のelse if文を体現している。なお、この事実上のelse if構文の実現には「ブレースの省略記法」と「フリーフォーマット」という単純な仕様が実にうまく働いている。

ブレースの省略記法

C言語由来の多くの言語はブレース(波括弧 = {})の省略が可能である。 そのため以下の式は、

if (A) {
    print(A);
} else {
    if (B) {
        print(B);
    }
}

以下のように記述することが可能になる。

if (A)
    print(A);
else
    if (B)
        print(B);

フリーフォーマット

C言語系列の多くの言語はフリーフォーマットを採用しているため、else文とif文を同一の行に記述しても問題はない。またインデントの数も自由に増減できる。

すると上記のコードは以下の様な詰めた書き方にもできる。

if (A)
    print(A);
else if (B)
    print(B);

結果としてelse ifという記述が実現された。

これだけのことである。else ifという見慣れた記法は、実は非常に単純なしくみによって実現されていたのである。

補足

C言語はブレースの省略ができるという趣旨の説明をしたが、実際は省略がデフォルトであり、ブレースは本来、複文/ブロック文を表現するための補助的な書き方でしかない。

ちなみに、if文の構文式はif (式) 文 else 文として表せるが、ブレース有りによる従来の記法はこの式のの部分にブロック文を当てはめているだけに過ぎない。なお先ほどから説明している「else if」構文は、つまる所この「文」の部分に「if文」を当てはめるという発想で実現されているのである。

関連

ブレース省略テクニック集【プログラミング作法】

広告
広告