elseを理解する

if文はboolean条件がtrueのときに処理を実行します。波括弧で囲む範囲、elseとの対応、条件式の型を確認し、どの文が実際に実行されるか追います。

この単元で学ぶこと

  • ifの条件と実行範囲を判断する
  • elseの対応と分岐順を追う
  • 条件の型と分岐後の変数を判定する

本文解説

二つの経路を選ぶ if(n>=0){System.out.print("nonnegative");}else{System.out.print("negative");}は条件trueなら前、falseなら後だけを実行します。通常完了した後は両経路とも分岐の次の文へ合流します。elseは独立して条件を持たず、対応するifの残りの経路を担当します。

else ifは段階的な判定 if(n>0){...}else if(n==0){...}else{...}は正、0、負を選べます。上から調べ、最初に成立した枝だけを実行します。else ifという一つの予約語があるわけではなく、elseの文として次のifが入る構造です。

条件の並び順 点数90以上A、60以上Bなら、90以上を先に置きます。if(score>=60){B}else if(score>=90){A}では95も最初のBになり、Aへ到達しません。条件が重なるときは、狭い条件を先にするか境界を明示して重複を避けます。

最も近いifへ対応する if(a)if(b)print("X");else print("Y");のelseは内側のif(b)に結び付きます。a=falseなら内側全体を実行せずYも出ません。外側へelseを付けたい場合は内側のifを波括弧で囲み、その閉じ括弧の後へelseを書きます。

elseの前に別の文を挟めない if(a)print("X");print("M");else print("Y");は不正です。elseの直前には対応するif文の構造が必要で、間の独立した文により結び付けられません。表示やログを両方行いたいならブロックへまとめます。

両枝での初期化 int n;if(flag){n=1;}else{n=2;}ならどちらを選んでもnに値が入るため、後でnを読めます。片側でreturnする場合も、読取りへ到達する経路で代入されていれば合法です。全枝に同じ代入文が必要という規則ではありません。

実行しない枝の式 int d=0;if(d==0){print("zero");}else{print(10/d);}では0除算を実行しません。if/elseは選ばれた枝だけを評価します。ただし型不一致の文があれば、選ばれない枝もコンパイル時に検査されます。

独立したifとの違い int n=1;if(n>0){n=0;}if(n==0){n=2;}は両方の条件を順に評価してnは2です。二番目をelse ifへすると最初の枝を選んだ時点で後は調べずnは0です。状態を変更する分岐では構造の違いが出力へ表れます。

図解

ifの二つの経路
表示上の字下げではなく構文と波括弧で範囲を判断する。

重要ポイント

  • 条件はbooleanまたはBoolean。
  • 波括弧なしでは直後の一文だけが対象。
  • elseは対応可能な最も近いifへ結び付く。
  • 選ばれた枝だけを実行し、通常は分岐後へ合流する。

間違えやすい点

  • ifの直後へ余計なセミコロンを書かない。
  • インデントだけで制御範囲を判断しない。
  • 条件として整数を使えると思わない。

用語解説

条件分岐
条件の真偽により実行する経路を選ぶ構文。
ブロック
波括弧で複数の文を一まとまりにしたもの。
空文
セミコロンだけで表す、何もしない文。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。