Javaの条件分岐4種類を完全解説|if文・switch文の使い分けと実務パターン

Mirai

Javaの条件分岐、if文以外にも種類があるって聞いたけど…どれをどう使えばいいの?

Zetto

if文・switch文・三項演算子などがあるね。場面によって使い分けることで、コードの読みやすさがぐっと変わるよ!

この記事では、Javaの条件分岐の基本構文から、実務で使える書き方まで解説します。

Zettoのライタープロフィール

本記事の専門性
現役エンジニアのZettoです。Java GoldとJava Silverの資格を保有しており、JavaでのWebアプリ開発をフリーランス案件として複数経験しています。

条件分岐の仕組みを理解しないままコードを書き続けると、ネストが深くなる・バグが起きやすくなるなど、実務での品質に影響します。

この記事を読めば、Javaの条件分岐4種類の書き方・使い分けの判断基準・実務で通用するコードの書き方が一通りわかります。

ぜひ参考にしてみてください。

目次

Javaの条件分岐とは|4種類の基本構文を整理する

Java条件分岐4種類

Javaの条件分岐には、場面に応じて使い分けられる4種類の構文があります。

  • if文・else if文の書き方
  • switch文の書き方とbreakの役割
  • 三項演算子でコードをシンプルにする方法
  • 比較演算子・論理演算子の種類と使い方

順番に解説していきます。

if文とelse if文の書き方

if文はJavaの条件分岐の基本で、「もし〜なら〜する」という処理を書くための構文です。

基本のif文の構文

if文の基本的な書き方はこうです。

if (条件式) {
    // 条件が真(true)のときの処理
}

具体的なコードで確認してみましょう。

int score = 80;

if (score >= 60) {
    System.out.println("合格です");
}

`score`が60以上のときだけ「合格です」と表示されます。条件を満たさない場合は何も実行されません。

else・else ifで複数条件を分岐させる

条件が複数あるときは、`else`や`else if`を組み合わせます。

int score = 75;

if (score >= 90) {
    System.out.println("優");
} else if (score >= 70) {
    System.out.println("良");
} else if (score >= 60) {
    System.out.println("可");
} else {
    System.out.println("不可");
}

`else if`は上から順番に評価されます。最初に`true`になった条件の処理だけが実行され、残りは無視されます。

`else`は「どの条件にも当てはまらない場合」の処理です。省略もできますが、処理漏れを防ぐために書いておくほうが安全です。

Zetto

if文は上から順番に条件をチェックしていきます。「最もよく当てはまる条件を上に書く」意識を持つだけで、処理効率が上がりますよ。

switch文の書き方とbreakの役割

switch文は、1つの変数の値によって処理を分岐させる構文です。

int day = 3;

switch (day) {
    case 1:
        System.out.println("月曜日");
        break;
    case 2:
        System.out.println("火曜日");
        break;
    case 3:
        System.out.println("水曜日");
        break;
    default:
        System.out.println("その他");
        break;
}

switch文の主要なキーワードは以下の通りです。

  • case:比較する値を書く。一致したらその処理を実行する
  • break:処理をそこで止める命令。書き忘れると次のcaseにも処理が流れてしまう
  • default:どのcaseにも一致しなかった場合の処理。if文の`else`と同じ役割

Javaのswitch文では、`int`・`char`・`String`・`enum`(列挙型)が使えます。`break`の書き忘れには特に注意が必要で、これについては後ほど詳しく解説します。

三項演算子でコードをシンプルにする方法

三項演算子は、条件分岐を1行で書ける構文です。

// 書き方:(条件式) ? trueのときの値 : falseのときの値
String result = (score >= 60) ? "合格" : "不合格";

これをif文で書き直すと次のようになります。

String result;
if (score >= 60) {
    result = “合格”;
} else {
    result = “不合格”;
}

三項演算子を使うとすっきり書けますが、条件が複雑になると逆に読みにくくなります。「1つの条件・2択の結果」のときだけ使うのが無難かなと思います。

Zetto

三項演算子は便利ですが、ネストして使うのはおすすめしません。「1条件・2択」のときだけ使うと決めておくと、コードの読みやすさを保てますよ。

比較演算子・論理演算子の種類と使い方

条件分岐には必ず比較演算子や論理演算子が登場します。基本的なものを整理しておきます。

比較演算子の一覧

演算子意味
`==`等しい`a == b`
`!=`等しくない`a != b`
`>`より大きい`a > b`
`>=`以上`a >= b`
`<`より小さい`a < b`
`<=`以下`a <= b`

論理演算子の一覧

演算子意味
`&&`かつ(AND)`a > 0 && a < 10`
`||`または(OR)`a == 1 || a == 2`
`!`否定(NOT)`!isActive`

論理演算子を使うと、複数の条件を1つの式で表現できます。

int age = 25;
boolean hasLicense = true;

if (age >= 18 && hasLicense) {
    System.out.println("運転できます");
}

`&&`は「両方がtrue」のとき、`||`は「どちらかがtrue」のときに条件が成立します。

4種類の構文をひと通り把握できたと思います。次のセクションでは「どれをどう使い分けるか」の判断基準を解説します。

Zetto

論理演算子は`&&`と`||`の2つを押さえれば、ほとんどの条件は書けます。まずはこの2つを優先的に覚えておきましょう。

if文とswitch文の使い分け|現場エンジニアが判断基準を解説

if文とswitch文の使い分け

基本構文を理解したら、次は「どれを選ぶか」の判断基準を覚えましょう。

  • if文を選ぶべき場面
  • switch文を選ぶべき場面

順にみていきましょう。

if文を選ぶべき場面

if文が向いているのは、複数の変数にまたがる条件や、範囲・不等号が絡む場面です。

int score = 75;
boolean isStudent = true;

if (score >= 90) {
    System.out.println("優");
} else if (score >= 70 && isStudent) {
    System.out.println("良(学生特例)");
} else if (score >= 60) {
    System.out.println("可");
} else {
    System.out.println("不可");
}

if文を選ぶ目安は次の通りです。

  • 不等号(>=、<= など)を使う比較:switch文は完全一致しかできない
  • 複数の変数を組み合わせた条件:`score >= 70 && isStudent` のような複合条件
  • 分岐が2〜3つ程度:シンプルな分岐はif文のほうが読みやすい

僕が実務でコードレビューをするとき、ネストが3段以上あるコードを見たら「ガード節で書き直せないか?」をまず確認します。

switch文を選ぶべき場面

switch文が向いているのは、「1つの変数の値」によって処理を分岐させる場面です。

String season = "spring";

switch (season) {
    case "spring":
        System.out.println("春です");
        break;
    case "summer":
        System.out.println("夏です");
        break;
    case "autumn":
        System.out.println("秋です");
        break;
    case "winter":
        System.out.println("冬です");
        break;
    default:
        System.out.println("不明な季節です");
        break;
}

switch文を選ぶ目安は以下の通りです。

  • 同じ変数を複数の固定値と比較する:`if (x == 1) … else if (x == 2) …` のような処理はswitch文のほうがすっきり書ける
  • 分岐が4つ以上ある:caseが増えるほどswitch文の可読性が上がる
  • 範囲や不等号が不要な比較:完全一致で分岐させるケース

実務で差がつく条件分岐の書き方

条件分岐の書き方

基本をマスターしたら、実務でコードの質を高める書き方を覚えましょう。

  • ガード節(早期リターン)でネストを削減する
  • Java 14以降のswitch式を使いこなす
  • パターンマッチング(instanceof)の活用

1つずつ解説していきます。

ガード節(早期リターン)でネストを削減する

ガード節とは、条件を満たさない場合に早めに処理を終了させる書き方のことで、早期リターンとも呼ばれます。

まず、ネストが深い読みにくいコードを見てみましょう。

public String getGrade(int score) {
    if (score >= 0) {
        if (score <= 100) {
            if (score >= 90) {
                return "優";
            } else {
                return "良以下";
            }
        } else {
            return "範囲外";
        }
    } else {
        return "範囲外";
    }
}

これをガード節で書き直すとこうなります。

public String getGrade(int score) {
    if (score < 0 || score > 100) {
        return "範囲外"; // 異常値は早期リターン
    }
    if (score >= 90) {
        return "優";
    }
    return "良以下";
}

ガード節を使うメリットは以下の通りです。

  • ネストが浅くなる:コードの見通しが格段に良くなる
  • 異常系が先に処理される:バグの温床になりやすい条件を先に弾ける
  • 正常系のコードだけを最後に残せる:処理の主旨が一目でわかる

実務でコードレビューをするとき、ネストが3段以上あるコードを見たら「ガード節で書き直せないか?」をまず確認しましょう。

ガード節はメソッド(処理のまとまり)と組み合わせることで真価を発揮します。メソッドの書き方についてはこちらの記事で詳しく解説しているので、合わせて読んでみてください。

Java 14以降のswitch式を使いこなす

Java 14以降では、従来のswitch文を大幅に改善した「switch式」が正式に使えるようになりました。

従来のswitch文との違い

従来のswitch文には次のような課題がありました。

  • `break`の書き忘れによるフォールスルーが発生しやすい
  • 値を返す場合に余計な変数が必要になる
  • 似たような記述が繰り返され、コードが冗長になりやすい

switch式はこれらの問題をまとめて解決します。

switch式の基本構文とコード例

switch式の書き方はこうです。

// Java 14以降のswitch式
int day = 3;
String dayName = switch (day) {
    case 1 -> "月曜日";
    case 2 -> "火曜日";
    case 3 -> "水曜日";
    case 4 -> "木曜日";
    case 5 -> "金曜日";
    default -> "週末";
};
System.out.println(dayName); // 水曜日

`->`(アロー演算子)を使うことで`break`が不要になり、フォールスルーも発生しません。複数のcaseをカンマでまとめることもできます。

String type = switch (day) {
    case 1, 2, 3, 4, 5 -> "平日";
    case 6, 7 -> "休日";
    default -> "不明";
};

従来のswitch文と比べて、コードがかなりすっきりしますね。

Javaのモダンな書き方という点では、ラムダ式も実務でよく使う機能です。switch式と同じく「コードを簡潔に書く」ための構文なので、あわせて確認しておくと理解が深まります。

パターンマッチング(instanceof)の活用

Java 16以降では、`instanceof`でパターンマッチングが使えるようになりました。

従来の書き方と比べてみましょう。

// 従来の書き方

Object obj = "Hello";
if (obj instanceof String) {
    String str = (String) obj; // キャスト(型変換)が必要
    System.out.println(str.length());
}
// Java 16以降のパターンマッチング

if (obj instanceof String str) {
    System.out.println(str.length()); // キャスト不要
}

パターンマッチングを使うと、型チェックと変数への代入を1行でできます。キャストの手間が省けて、コードがシンプルになります。

実務でよく使うのは、メソッドの引数に複数の型が渡ってくる場面です。型によって処理を分岐させたいときに便利です。

Zetto

実務で差がつく書き方を3つ解説しました。基本構文と組み合わせることで、読みやすく保守しやすいコードが書けるようになります。

Javaの条件分岐 演習問題

Java条件分岐演習問題

理解を深めるために、演習問題を3つ用意しました。

演習問題1:if-else文で点数に応じた評価を表示する

問題

整数型の変数`score`に点数を代入してください。if-else文を使って、以下のルールで評価を表示するプログラムを書いてください。

  • 90点以上:「優」
  • 70点以上90点未満:「良」
  • 60点以上70点未満:「可」
  • 60点未満:「不可」

解答例

public class Main {
    public static void main(String[] args) {
        int score = 75;

        if (score >= 90) {
            System.out.println("優");
        } else if (score >= 70) {
            System.out.println("良");
        } else if (score >= 60) {
            System.out.println("可");
        } else {
            System.out.println("不可");
        }
    }
}

解説

`else if`は上から順番に評価されます。`score = 75`の場合、`score >= 90`はfalseなので次へ進み、`score >= 70`がtrueになるため「良」と表示されます。90以上 → 70以上 → 60以上という「大きい条件から小さい条件へ」の順番で書くのがポイントです。

演習問題2:switch文で曜日別メッセージを出力する

問題

整数型の変数`dayOfWeek`に1〜7の値を入れてください(1=月曜日、7=日曜日)。switch文を使って、以下のメッセージを表示するプログラムを書いてください。

  • 平日(1〜5):「お仕事頑張りましょう!」
  • 土曜(6):「明日は休みですね!」
  • 日曜(7):「ゆっくり休んでください!」

解答例

public class Main {
    public static void main(String[] args) {
        int dayOfWeek = 3;

        switch (dayOfWeek) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("お仕事頑張りましょう!");
                break;
            case 6:
                System.out.println("明日は休みですね!");
                break;
            case 7:
                System.out.println("ゆっくり休んでください!");
                break;
            default:
                System.out.println("1〜7の値を入力してください");
                break;
        }
    }
}

解説

`case 1`〜`case 5`は意図的に`break`を省略してフォールスルーを活用しています。複数のcaseで同じ処理を実行したいときに便利な書き方です。また`default`で想定外の値が入ったときのエラー処理を書いておくと、より安全なコードになります。

演習問題3:ガード節を使ってネストをリファクタリングする

問題

以下のネストが深いコードを、ガード節(早期リターン)を使って読みやすく書き直してください。

public String checkUser(String name, int age) {
    if (name != null) {
        if (!name.isEmpty()) {
            if (age >= 18) {
                return “有効なユーザーです”;
            } else {
                return “18歳未満は利用できません”;
            }
        } else {
            return “名前が空です”;
        }
    } else {
        return “名前がnullです”;
    }
}

解答例

public String checkUser(String name, int age) {
    if (name == null) {
        return "名前がnullです";
    }
    if (name.isEmpty()) {
        return "名前が空です";
    }
    if (age < 18) {
        return "18歳未満は利用できません";
    }
    return "有効なユーザーです";
}

解説

ガード節の基本は「異常系を先に弾く」ことです。`null`チェック → 空文字チェック → 年齢チェックの順に異常値を早期リターンで処理することで、ネストをゼロにできます。

最後の`return`だけが「正常系」の処理になるので、コードの意図が格段に読みやすくなります。

Zetto

特に演習3のガード節は、実務でも頻繁に使う書き方です。「このネストはガード節で書き直せないか?」と考える習慣を持てると、コード品質が上がりますよ。

Javaの条件分岐をマスターして実務コードを書けるようになろう

Java条件分岐をマスター

この記事では、Javaの条件分岐について基礎から実務パターンまで解説しました。

重要なポイントをまとめます。

  • if文:複合条件・範囲比較に向いている。「〜かつ〜」「〜以上」のような条件はif文が基本
  • switch文:1変数を複数の固定値と比較するとき向いている。分岐が4つ以上になるとswitch文のほうが読みやすい
  • 三項演算子:1条件・2択のシンプルな分岐だけに使う
  • ガード節:異常値を早期リターンで処理して、ネストを浅く保つ
  • switch式(Java 14以降):`->`を使うことでbreakが不要になり、より安全に書ける

実務で質の高いコードを書くためには、「動けばいい」だけでなく「読みやすいか」「保守しやすいか」も意識することが大切です。

Mirai

switch式、breakがいらないだけでこんなにすっきり書けるんだね!ガード節も早速試してみる!

Zetto

条件分岐は実務でほぼ毎日使う構文だから、手を動かすうちに自然と身につくよ!

条件分岐と並んで、繰り返し処理(for文・while文)もJavaの基本構文のひとつです。条件分岐と組み合わせることでより複雑なロジックを組めるようになります。気になる方はこちらの記事も参考にしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次