Java – if then else

if-then文

基本形

if-then文は以下のようにifキーワード、(boolean式)、1つの文が並べられた文で、boolean式がtrueの場合に文が実行される。

if (boolean式) 文;

キーワードから見るとif文となるが、Oracleの仕様書を尊重してif-then文としておく。

改行した場合

実行文の前で改行しても同じように実行される。

エラープローン

if-then文で改行して複数の文を書いた場合、条件式直後の1文しか条件の判定結果に含まれない。以下の例ではfalseで1つ目の分は無視されるが、その直後の文に制御が移って実行される(インデントは効果がない)。

当初簡易化のために改行形で書いていて、後から条件の対象となる文をそのまま付け加えた時、意図したロジックと異なる動作をしてしまう可能性がある。

一般形

上のようなトラブルを回避するため、一般にはif命令の後の文を{}で囲んでブロックとする。

if (...) { ..... }

if-then-else文

基本形

if-then-else文は以下のようにifキーワード、(boolean式)、文1、elseキーワード、文2が並べられた文で、boolean式がtrueの場合に文1が、falseの場合には文2が実行される。

if (boolean式) 文1 else 文2;

改行した場合

文1の前、elseの前、文2の前で改行しても、文2の終わりまでが1つのif-then-else文として扱われる。

エラー

以下のコードはコンパイルエラーになる。

これは、以下の理由による

  • if-then文に属するのは"1st line"の文だけ
  • その後、if-then文の外側として"2nd line"の文が実行される
  • これに続くelseには、それが属するべきif文がなく、if-else文ではないのにelse単独で存在
  • よって構文エラー

一般形

上記のようなエラーを避け、またif文であったようなトラブルを避けるためにも、if-else文においても{}によるブロック表記が一般的。

if (...) { ..... } else { ..... }

else if

Javaの仕様上、Pythonのelif、Rubyのelsif、PHPのelseifに相当するキーワードはない。

これらと同等のロジックを組むために一般的には”else if“という表現がされているが、これを適切に扱うにはブロックとして扱うべきである。これについて”Java仕様における”Java – if文をブロック化すべき理由とelse if“に示した。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です