Javaのelse ifとは?複数条件分岐の書き方・使い方を初心者向けに地方フルリモートエンジニアが実務視点で解説

Java基礎

プログラミングでは、条件に応じて異なる処理を実行する場面が頻繁にあります。if文だけでは2択しかできませんが、実際の開発では3つ以上の選択肢から処理を選びたい場面が多くあります。そんなときに使うのが「else if文」です。この記事では、Javaのelse ifの書き方から実践的な使い方、さらに実務で重要な可読性の向上方法まで、初心者の方にもわかりやすく解説します。

生徒
if-elseだと2択しかできませんよね?3つ以上の条件を判定したいときはどうするんですか?
先生
いい質問だね!そんなときに使うのが「else if」だよ。条件を何個でも追加できるんだ!

else ifとは何か?初心者が知っておくべき基本概念

else if文とは、最初のif条件が偽の場合に、別の条件をチェックするための構文です。複数の条件を順番に判定し、最初に真になった条件の処理だけを実行します。これにより、2択以上の複雑な条件分岐を実現できます。

else if文を使うことで、例えば「成績が90点以上ならA、80点以上ならB、70点以上ならC」といった、複数の条件に応じた処理を1つのif-else if-elseのブロックで記述できます。通常のif文を複数書くのとは異なり、条件が上から順番に評価され、最初に真になった条件の処理だけが実行されるという特徴があります。

if文の基本について詳しく知りたい方は、以下の記事も参考にしてください。

else if文の基本構文はどう書く?

if (条件1) {
    // 条件1がtrueの場合
} else if (条件2) {
    // 条件1がfalse、条件2がtrueの場合
} else if (条件3) {
    // 条件1,2がfalse、条件3がtrueの場合
} else {
    // すべての条件がfalseの場合
}
重要ポイント:

  • else ifは何個でも追加できる
  • 条件は上から順番に判定される
  • 最初にtrueになった条件の処理だけが実行される
  • 最後のelseは省略可能

基本的なelse ifの使い方を具体例で理解しよう

成績評価システム

public class GradeEvaluation {
    public static void main(String[] args) {
        int score = 75;
        
        System.out.println("点数: " + score);
        
        if (score >= 90) {
            System.out.println("評価: A(優秀)");
        } else if (score >= 80) {
            System.out.println("評価: B(良好)");
        } else if (score >= 70) {
            System.out.println("評価: C(普通)");
        } else if (score >= 60) {
            System.out.println("評価: D(可)");
        } else {
            System.out.println("評価: F(不可)");
        }
    }
}

実行結果:

点数: 75
評価: C(普通)

このコードでは、点数に応じて5段階の評価を判定しています。条件は上から順番にチェックされ、最初に当てはまった条件の処理が実行されます。例えば、75点の場合は「score >= 90」がfalse、「score >= 80」がfalse、「score >= 70」がtrueとなるため、「評価: C(普通)」が出力されます。

このように、else if文を使うことで、複数の条件を1つのブロックで管理でき、コードが読みやすくなります。また、条件の判定順序を意識することで、意図した通りの動作を実現できます。

処理の流れを確認しよう

score = 75 の場合:
1. score >= 90 → 75 >= 90 → false → 次へ
2. score >= 80 → 75 >= 80 → false → 次へ
3. score >= 70 → 75 >= 70 → true → "評価: C" を出力して終了
生徒
上から順番に判定されて、最初に当てはまった条件で処理が終わるんですね!

実践的なelse ifの使用例

例1: 年齢による料金区分

public class AgePricing {
    public static void main(String[] args) {
        int age = 25;
        int basePrice = 1000;
        int finalPrice;
        String category;
        
        if (age < 6) {
            category = "幼児";
            finalPrice = 0;  // 無料
        } else if (age < 12) {
            category = "小学生";
            finalPrice = basePrice / 2;  // 半額
        } else if (age < 18) {
            category = "中高生";
            finalPrice = (int)(basePrice * 0.7);  // 3割引
        } else if (age >= 65) {
            category = "シニア";
            finalPrice = (int)(basePrice * 0.8);  // 2割引
        } else {
            category = "一般";
            finalPrice = basePrice;
        }
        
        System.out.println("年齢: " + age + "歳");
        System.out.println("区分: " + category);
        System.out.println("料金: " + finalPrice + "円");
    }
}

実行結果:

年齢: 25歳
区分: 一般
料金: 1000円

このコードでは、年齢に応じて料金区分と最終価格を計算しています。実務でよく使われるパターンです。年齢による料金区分は、遊園地や映画館、交通機関など、様々なサービスで使われています。

この例では、幼児(6歳未満)は無料、小学生(6歳以上12歳未満)は半額、中高生(12歳以上18歳未満)は3割引、シニア(65歳以上)は2割引、それ以外は一般料金という設定になっています。条件の順序に注意することで、正しく料金区分を判定できます。

例2: 曜日による処理分岐

public class DayOfWeek {
    public static void main(String[] args) {
        int day = 3;  // 1=月曜, 2=火曜, ..., 7=日曜
        String schedule;
        
        if (day == 1) {
            schedule = "会議の日";
        } else if (day == 2) {
            schedule = "企画書作成";
        } else if (day == 3) {
            schedule = "外回り営業";
        } else if (day == 4) {
            schedule = "チームミーティング";
        } else if (day == 5) {
            schedule = "週次レポート提出";
        } else if (day == 6 || day == 7) {
            schedule = "お休み";
        } else {
            schedule = "無効な曜日";
        }
        
        System.out.println("今日の予定: " + schedule);
    }
}

実行結果:

今日の予定: 外回り営業

このコードでは、曜日を表す数値に応じて予定を表示しています。このような「特定の値に応じた分岐」はswitch文でも書けます。switch文について詳しく知りたい方は、以下の記事も参考にしてください。

曜日による処理分岐は、業務システムやスケジュール管理アプリなどでよく使われるパターンです。月曜日は会議、火曜日は企画書作成、といったように、曜日ごとに異なる処理を実行する必要がある場合に便利です。この例では、土日(6と7)は同じ「お休み」という処理を実行するため、条件を「day == 6 || day == 7」としてまとめています。

例3: BMI判定

public class BMICalculator {
    public static void main(String[] args) {
        double height = 1.70;  // メートル
        double weight = 65.0;  // キログラム
        
        // BMI計算
        double bmi = weight / (height * height);
        String result;
        
        if (bmi < 18.5) {
            result = "低体重(やせ型)";
        } else if (bmi < 25.0) {
            result = "普通体重";
        } else if (bmi < 30.0) {
            result = "肥満(1度)";
        } else if (bmi < 35.0) {
            result = "肥満(2度)";
        } else {
            result = "肥満(3度以上)";
        }
        
        System.out.printf("身長: %.2fm%n", height);
        System.out.printf("体重: %.1fkg%n", weight);
        System.out.printf("BMI: %.1f%n", bmi);
        System.out.println("判定: " + result);
    }
}

実行結果:

身長: 1.70m
体重: 65.0kg
BMI: 22.5
判定: 普通体重

このコードでは、BMI値に応じて体型を判定しています。数値の範囲判定にelse ifを使う典型的な例です。BMI(Body Mass Index)は、体重と身長から計算される体格指数で、18.5未満は低体重、18.5以上25.0未満は普通体重、25.0以上30.0未満は肥満(1度)、30.0以上35.0未満は肥満(2度)、35.0以上は肥満(3度以上)と分類されます。

この例では、BMI値の範囲に応じて体型を判定しています。条件の順序が重要で、厳しい条件(大きい値)から先に書くことで、正しく判定できます。例えば、BMIが22.5の場合は「bmi < 18.5」がfalse、「bmi < 25.0」がtrueとなるため、「普通体重」と判定されます。

条件の順序に注意!順番を間違えるとどうなる?

else ifでは、条件を書く順序が非常に重要です。順序を間違えると、正しく判定されません。

間違った順序の例

NG: 条件の順序が逆
int score = 95;

// 広い条件が先に来ている
if (score >= 60) {
    System.out.println("D");  // 60以上はすべてここに入る
} else if (score >= 70) {
    System.out.println("C");  // 到達しない!
} else if (score >= 80) {
    System.out.println("B");  // 到達しない!
} else if (score >= 90) {
    System.out.println("A");  // 到達しない!
}
// 結果: 95点なのに "D" と表示される
OK: 厳しい条件から先に
int score = 95;

// 厳しい条件(狭い範囲)から先に
if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");
} else if (score >= 70) {
    System.out.println("C");
} else if (score >= 60) {
    System.out.println("D");
}
// 結果: 正しく "A" と表示される
先生
数値の範囲判定では「厳しい条件(大きい値)から先に」書くのがコツだよ!

else ifとネストの違いは?どちらを使うべき?

同じことを実現する方法として、ifのネスト(入れ子)もありますが、else ifの方が読みやすいです。

ネストした場合(読みにくい)

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

else ifを使った場合(読みやすい)

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

どちらも同じ結果になりますが、else ifを使った方がコードがフラットで読みやすくなります。ネストが深くなると、コードの可読性が低下し、バグの原因にもなりやすいため、可能な限りelse ifを使うことを推奨します。

運営者
条件が複雑な場合はif-else ifを選びます。後から条件を追加しやすく、可読性も高いです。

条件分岐が多くなったらどうする?可読性を上げる方法

else if文は便利ですが、条件が多くなりすぎるとコードが読みにくくなることがあります。実務では、条件分岐が多くなったときは、本当にこの分岐が必要かを一度見直すことが重要です。

例えば、曜日による処理分岐をelse ifで書くと、7つの条件が必要になります。このような場合、switch文を使うことで、コードがより読みやすくなります。switch文は、特定の値に応じた分岐に適しており、else ifよりもスッキリと書けます。

else ifで書いた場合(読みにくい)

int day = 3;
String schedule;

if (day == 1) {
    schedule = "会議の日";
} else if (day == 2) {
    schedule = "企画書作成";
} else if (day == 3) {
    schedule = "外回り営業";
} else if (day == 4) {
    schedule = "チームミーティング";
} else if (day == 5) {
    schedule = "週次レポート提出";
} else if (day == 6) {
    schedule = "お休み";
} else if (day == 7) {
    schedule = "お休み";
} else {
    schedule = "無効な曜日";
}

switch文で書いた場合(読みやすい)

int day = 3;
String schedule;

switch (day) {
    case 1:
        schedule = "会議の日";
        break;
    case 2:
        schedule = "企画書作成";
        break;
    case 3:
        schedule = "外回り営業";
        break;
    case 4:
        schedule = "チームミーティング";
        break;
    case 5:
        schedule = "週次レポート提出";
        break;
    case 6:
    case 7:
        schedule = "お休み";
        break;
    default:
        schedule = "無効な曜日";
}

このように、特定の値に応じた分岐の場合は、switch文の方が読みやすくなります。また、条件分岐が多くなったときは、以下の点を検討することで可読性を上げられます。

可読性を上げるポイント:

  • 本当にこの分岐は必要かを見直す:不要な条件分岐がないか確認する
  • switch文と使い分ける:特定の値に応じた分岐はswitch文を使う
  • 条件をまとめる:同じ処理を実行する条件は、論理演算子(&&、||)でまとめる
  • メソッドに分割する:条件分岐が複雑な場合は、別メソッドに分けることで可読性が上がる

実務では、コードの可読性は非常に重要です。条件分岐が多くなったときは、一度立ち止まって「本当にこの分岐は必要かな?」と見直したり、switch文と使い分けたりすることで、コードの可読性を上げることができます。これにより、後からコードを読む人や、将来の自分が理解しやすくなります。

よくある間違いと対処法

間違い①: elseとelse ifの混同

NG: elseに条件を書いている
if (score >= 90) {
    System.out.println("A");
} else (score >= 80) {  // elseに条件を書いている!コンパイルエラー
    System.out.println("B");
}
OK: else ifを使う
if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {  // else ifを使う
    System.out.println("B");
}

間違い②: 条件の漏れ

NG: すべての条件をカバーしていない
int month = 13;  // 無効な月

if (month >= 3 && month <= 5) {
    System.out.println("春");
} else if (month >= 6 && month <= 8) {
    System.out.println("夏");
}
// 13の場合、何も出力されない
OK: elseで想定外をカバー
int month = 13;

if (month >= 3 && month <= 5) {
    System.out.println("春");
} else if (month >= 6 && month <= 8) {
    System.out.println("夏");
} else {
    System.out.println("その他または無効な月");
}

まとめ

この記事では、Javaのelse ifの基本から実践的な使い方、さらに可読性を上げる方法まで解説しました。else if文は、複数の条件を順番に判定するための重要な構文で、実務でも頻繁に使われます。

この記事のポイント

  • else ifで複数の条件を順番に判定できる
  • 条件は上から順番に判定される
  • 数値範囲は厳しい条件から先に書く
  • elseで想定外の値に対応できる
  • ネストよりelse ifの方が読みやすい
  • 条件分岐が多くなったら、本当に必要かを見直したりswitch文と使い分けたりすることで可読性を上げられる
生徒
else ifで複数条件の分岐ができるようになりました!条件の順序が大事なんですね!
先生
その通り!次はswitch文を学んでみよう。特定の値に応じた分岐がもっとスッキリ書けるようになるよ!

else ifは実務でも頻繁に使う重要な構文です。条件の順序に注意しながら、さらに条件分岐が多くなったときは可読性を意識して、switch文と使い分けたり、本当に必要な分岐かを見直したりすることで、より良いコードを書けるようになります。ぜひ活用していきましょう!