Java | 基礎文法:else 文

Java Java
スポンサーリンク

else 文の役割と基本

else 文は、if の条件が false のときに実行する「もう一方の手」を明示します。分岐は「A ならこうする、そうでないなら別のこうする」という二者択一をシンプルに書けるのが強みです。else は常に直前の if に結びつき、評価は上から順に行われ、最初に一致したブロックだけが実行されます。可読性と安全性のために、1 行でも必ず {} を付けるのが定石です。

int score = 55;

if (score >= 60) {
    System.out.println("合格");
} else {
    System.out.println("不合格");
}
Java

else if 連鎖と「上から下へ」の設計

連続条件の表現

複数の条件分けは else if を連ねます。判定は上から評価され、最初に一致したブロックで終了します。重複や抜けがないよう「上位から下位へ」順序付けするのがコツです。

int score = 75;

if (score >= 80) {
    System.out.println("A");
} else if (score >= 70) {
    System.out.println("B");
} else if (score >= 60) {
    System.out.println("C");
} else {
    System.out.println("D");
}
Java

この並び方なら、70 台は必ず B、60 台は必ず C のように境界が綺麗に分かれます。else は「どれにも当てはまらないときの最後の受け皿(デフォルト)」です。


重要ポイントの深掘り:ブロックと結びつき

ダングリング else(結びつきの誤解を避ける)

else は「直前の、対応する if」に結びつきます。インデントだけではなく、構文で決まります。誤解を防ぐため、必ず {} を使います。

// 悪い例(中括弧なしは誤解を生む)
if (ok)
    if (ready)
        System.out.println("Go");
else
    System.out.println("Stop");

// 良い例(常にブロック化)
if (ok) {
    if (ready) {
        System.out.println("Go");
    } else {
        System.out.println("Stop");
    }
}
Java

1 行 else の罠を避ける

将来、処理が増えたときに意図せず動作が変わる事故を防ぐため、ifelse も常にブロックで書きます。「読みやすさ>短さ」が基本方針です。


else の代替と使い分け(設計視点)

早期リターンで else を減らす

「異常系を先に弾く」ガード節を使うと、ネストが浅くなり else を減らせます。主要ロジックが左にフラットに並び、読みやすく保守しやすい形になります。

public static void process(String email) {
    if (email == null || email.isBlank()) {
        System.out.println("メールは必須です");
        return; // 早期終了
    }
    // 以降は email が有効である前提の本処理
    System.out.println("処理を続行");
}
Java

三項演算子との比較(値を選ぶだけなら)

「分岐で値を選ぶだけ」なら三項演算子 ?: が簡潔です。ただし処理が複雑なら if-else に戻します。

int score = 85;
String label = (score >= 60) ? "合格" : "不合格";
System.out.println(label);
Java

switch の適材適所

多岐分岐(定数や列挙値に応じた分岐)は switch が読みやすい場合があります。文字列や列挙での分岐は switch、範囲判定は if-else if が向いています。


よくある落とし穴と対策

条件の重複・抜け

else if の順序が不適切だと、上位条件に飲み込まれて後段が実行されないことがあります。範囲・順序を「上から下へ」設計し、境界値テストを必ず行います。

int age = 18;
int price;

if (age < 6) {
    price = 0;
} else if (age <= 18) {    // 6〜18
    price = 500;
} else if (age >= 65) {
    price = 700;
} else {
    price = 1000;
}
Java

副作用を条件内に混ぜない

if ((x = f()) > 0) { ... } のように代入・更新を条件に混ぜると、読み手が意図を誤解します。更新は更新、判定は判定で分けて書きます。


実用例で身につける

例 1: 入力検証の受け皿(else でメッセージ)

public class Validator {
    public static void main(String[] args) {
        String email = "user@example.com";

        if (email == null || email.isBlank()) {
            System.out.println("メールは必須です");
        } else if (!email.contains("@")) {
            System.out.println("@ を含めてください");
        } else if (email.length() > 256) {
            System.out.println("長すぎます");
        } else {
            System.out.println("検証 OK");
        }
    }
}
Java

「最後の else が成功時の処理」という形は、読み手が期待どおりに追える定番パターンです。

例 2: 料金テーブル(明確なデフォルト)

public class Pricing {
    public static void main(String[] args) {
        int age = 40;
        int price;

        if (age < 6) {
            price = 0;
        } else if (age <= 18) {
            price = 500;
        } else if (age >= 65) {
            price = 700;
        } else {
            price = 1000; // デフォルト(一般)
        }

        System.out.println(price);
    }
}
Java

「どれにも当てはまらない場合」の明確なデフォルトを else に置くと、仕様の網羅がはっきりします。

例 3: ネストを避ける設計(早期リターン)

public class Access {
    public static void main(String[] args) {
        boolean isAdmin = true;
        boolean isActive = false;

        if (!isAdmin) {
            System.out.println("管理者のみです");
            return;
        }
        if (!isActive) {
            System.out.println("無効なアカウントです");
            return;
        }
        System.out.println("ようこそ、管理画面へ");
    }
}
Java

else を使わずとも、ガード節で意図が明確な分岐を作れます。


設計の指針(重要ポイントのまとめ)

else は「そうでない場合」を明快に示す受け皿です。else if は上から順に、重複しないしきい値で設計し、最後の else にデフォルトを置くと読みやすく安全です。ブロック {} を常に付け、ダングリング else の誤解を防ぎます。副作用は条件に混ぜず、異常系は早期リターンで弾くとネストが浅く保てます。値の選択だけなら三項演算子、定数分岐は switch を使い分ける——この基本を身につければ、else はコードの意図を短く確実に伝える味方になります。

タイトルとURLをコピーしました