if・elseの違いと使い分け
if文はboolean条件がtrueのときに処理を実行します。波括弧で囲む範囲、elseとの対応、条件式の型を確認し、どの文が実際に実行されるか追います。
この単元で学ぶこと
- ifの条件と実行範囲を判断する
- elseの対応と分岐順を追う
- 条件の型と分岐後の変数を判定する
本文解説
一方向の処理と二方向の処理 if(temp<0){warning=true;}は条件を満たした場合だけ状態を変えます。if(temp<0){label="cold";}else{label="warm";}は常にどちらかを設定します。初期値を保つ場面か、必ず分類する場面かにより構造を選びます。
独立判定は複数成立する int n=6;if(n%2==0){print("even");}if(n%3==0){print("three");}では両方表示します。性質を複数列挙する目的なら独立したifが適切です。else ifにすると最初の成立で止まり、3の倍数という性質を列挙しません。
一つだけ選ぶ分類 if(score>=80){grade="A";}else if(score>=60){grade="B";}else{grade="C";}は一つの区分を選びます。同じ条件で独立ifを使い後の代入を行うと、高得点でもBに上書きされる可能性があります。出力だけでなく代入先の最終値まで追います。
境界値で比較する 0を正か負かの二択へ無理に含めず、必要ならelse if(n==0)を追加します。if(n>0)elseではelseに0と負数の両方が入ります。elseが常に負数を意味するのではなく、直前までの条件をすべて満たさない集合を表します。
更新前と更新後の条件 int n=2;if(n>0){n=-1;}if(n<0){n=0;}は最終0です。else ifなら最初が成立した後に負数へ変わっても後を調べず-1です。条件の値はコードの初期値に固定されず、独立ifへ到達した時の現在値から計算します。
elseとブロックの位置 外側ifにelseを付けたい場合、内側のifをブロックで囲みます。字下げで外側に揃えたelseでも、波括弧がなければ近いifへ対応します。見た目を無視して波括弧と一文の構造を追う練習が必要です。
分岐と早期終了 if(invalid){return;}の後には有効な場合だけ進みます。if/elseを使わず早期終了により残りの処理の前提を作れます。ただしreturnはifだけでなく現在のメソッドを終了するため、後の共通処理も実行しません。
初期化経路の比較 int x;if(condition){x=1;}の後の読取りは、代入されない経路が残るため不正です。宣言時にx=0を入れる方法、elseで代入する方法、未代入経路でreturnする方法があります。いずれも読む場所に到達したときの代入済み状態を保証する方法です。
図解
重要ポイント
- 条件はbooleanまたはBoolean。
- 波括弧なしでは直後の一文だけが対象。
- elseは対応可能な最も近いifへ結び付く。
- 選ばれた枝だけを実行し、通常は分岐後へ合流する。
間違えやすい点
- ifの直後へ余計なセミコロンを書かない。
- インデントだけで制御範囲を判断しない。
- 条件として整数を使えると思わない。
用語解説
- 条件分岐
- 条件の真偽により実行する経路を選ぶ構文。
- ブロック
- 波括弧で複数の文を一まとまりにしたもの。
- 空文
- セミコロンだけで表す、何もしない文。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。