はじめに
Java の if 文はシンプルですが、
ネスト(入れ子) が増えると一気に難しくなります。
- else がどの if に紐づくかわからない
- ブロック
{}を省略して意図しない動作になる - ネストが深くなりすぎて読めない
- 条件式の順番でバグが起きる
こうしたミスは、初心者だけでなく実務でもよく発生します。
この記事では、やさしく・実務寄りに
if 文のネストで起きやすいミスを整理していきます。
まずはコードを確認
Java
int score = 80;
boolean isMember = false;
if (score > 70)
if (isMember)
System.out.println("特典あり");
else
System.out.println("特典なし");一見正しそうですが、
実は else の紐づき先が意図と違う 可能性があります。
ミス①:else が「直前の if」に紐づく問題(ぶら下がり else)
Java のルール:
else は、常に“直前の if”に紐づく
つまり、次のコードは意図と違う動作になります。
Java
if (score > 70)
if (isMember)
System.out.println("特典あり");
else
System.out.println("特典なし"); // ← この else は内側の if に紐づく意図としては:
- 70点以上なら
- 会員なら特典あり
- 会員でなければ特典なし
のつもりでも、実際には:
- isMember が false のときだけ else が動く
- score > 70 の条件は外側だけに影響
正しい書き方(必ず {} をつける)
Java
if (score > 70) {
if (isMember) {
System.out.println("特典あり");
} else {
System.out.println("特典なし");
}
}ブロックを省略しない
これが最も安全な書き方です。
ミス②:{} を省略して意図しない行だけ if に入る
Java
if (x > 0)
System.out.println("OK");
System.out.println("NG"); // ← if の外見た目では if の中に見えますが、
実際には NG が常に出力されます。
正しい書き方
Java
if (x > 0) {
System.out.println("OK");
System.out.println("NG");
}ミス③:ネストが深くなりすぎて読めない
Java
if (a) {
if (b) {
if (c) {
if (d) {
...こうなると、
どの条件がどこに対応しているのか
読み手が迷子になります。
実務では「早期 return」で浅くする
Java
if (!a) return;
if (!b) return;
if (!c) return;
if (!d) return;ネストを浅くすることで、
読みやすく安全なコードになります。
ミス④:条件式の順番で意図しない動作になる
Java
if (obj != null && obj.isValid()) { ... }これは安全ですが、順番を逆にすると危険です。
Java
if (obj.isValid() && obj != null) { ... } // ← NullPointerExceptionAND(&&)は左から評価される
→ null チェックは必ず左側に置く
ミス⑤:else if の代わりに if を並べてしまう
Java
if (score >= 80) {
System.out.println("A");
}
if (score >= 70) {
System.out.println("B"); // ← A と B の両方が出る可能性
}正しい書き方
Java
if (score >= 80) {
System.out.println("A");
} else if (score >= 70) {
System.out.println("B");
}ミス⑥:条件式が複雑すぎて意図が伝わらない
Java
if ((a && b) || (!c && d) || (e && !f && g)) { ... }書けるけれど、
読む側が理解できない のが最大の問題。
実務では「意味のある変数名」で分解する
Java
boolean isAdult = age >= 20;
boolean hasTicket = ticket != null;
boolean isHoliday = day.isHoliday();
if (isAdult && hasTicket && isHoliday) { ... }使うときに気をつけたいこと
- else は直前の if に紐づく(ぶら下がり else に注意)
- {} を省略しない(最重要)
- ネストは浅くする(早期 return が有効)
- null チェックは左側に置く
- else if を正しく使う
- 複雑な条件式は分解する
実務では「読みやすさ」が最も大切です。
まとめ
if 文のネストで起きやすいミス
- else の紐づき先を間違える
- {} を省略して意図しない動作になる
- ネストが深くて読めない
- 条件式の順番で例外が起きる
- if を並べてしまい、意図しない複数実行
- 条件式が複雑すぎる
安全に書くためのポイント
- ブロックは必ず書く
- ネストは浅くする
- 条件式は分解する
- null チェックは左側に置く

decopon
if 文のネストは、 「書ける」よりも「読める」ことが大切です。特に ぶら下がり else と {} の省略 は Java Bronze でも実務でも頻出の落とし穴。ここを押さえておくだけで、 あなたのコードはぐっと読みやすく、安全になります。あなたの学びが、次のステップにつながりますように。

moco
else は“いちばん近い if”にくっつくんだって。
だから {} をつけると、すごく安心して書けるよ。

コメント