Java | break 文の使い方

Java Java
スポンサーリンク

実務でよくある break の使い方 5選

break は初心者練習だけでなく、実務の中でもしっかり使われる構文です。
ここでは、Javaの現場でよく登場する「break の実務パターン」5選を、
「シーン → コード例 → 解説」という流れでわかりやすく整理します。


パターン①:検索処理(見つけたら即終了)

シーン

リストや配列から「最初に一致した要素」だけを見つければよいとき。
→ 見つけた瞬間に break でループを終わらせ、無駄な探索を防ぐ。

コード例

List<String> users = List.of("Alice", "Bob", "Charlie", "David");
String target = "Charlie";

boolean found = false;
for (String name : users) {
    if (name.equals(target)) {
        System.out.println("見つけたユーザー: " + name);
        found = true;
        break; // もう探す必要なし
    }
}

if (!found) {
    System.out.println("該当ユーザーなし");
}
Java

実務解説

たとえば「ユーザー一覧から特定IDを検索」などでよく使います。
break でループを早期終了することで、パフォーマンスを最適化します。
(Stream API の .findFirst() に置き換えるのも実務でよくあります)


パターン②:リトライ処理(成功したら抜ける)

シーン

ネットワーク通信・API・DB接続などで「何回か試して成功したら終わる」場合。

コード例

final int MAX_RETRY = 3;
for (int i = 1; i <= MAX_RETRY; i++) {
    System.out.println("接続試行 " + i + " 回目...");
    boolean success = connectToServer(); // 仮のメソッド

    if (success) {
        System.out.println("接続成功!");
        break; // 成功したらリトライ終了
    }

    if (i == MAX_RETRY) {
        System.err.println("接続失敗。最大リトライ回数に到達");
    }
}

private static boolean connectToServer() {
    // 実際は API 呼び出し or Socket 接続
    return Math.random() > 0.7; // 30% 失敗する想定
}
Java

実務解説

こうした「リトライ+上限つき」は堅牢な通信処理の基本。
break で「成功したら即抜ける」構造にしておくと、制御が明確になります。
👉 Spring Boot なら RetryTemplate で書き換えることも多いですが、
入門~業務コードではこのパターンが基本です。


パターン③:ユーザー入力の検証ループ(正しい入力で抜ける)

シーン

コンソールアプリやバッチ処理で、ユーザーからの入力を受け取るとき。
→ 正しい値が入るまでループ。正解なら break で抜ける。

コード例

import java.util.Scanner;

Scanner sc = new Scanner(System.in);
int age;

while (true) {
    System.out.print("年齢を入力してください: ");
    age = sc.nextInt();
    if (age >= 0 && age <= 120) {
        System.out.println("入力完了: " + age + "歳");
        break; // 正しい値ならループ終了
    } else {
        System.out.println("入力が不正です。再入力してください。");
    }
}
sc.close();
Java

実務解説

バッチ処理・CLIツールなどで「入力チェック+ループ」構造は頻出。
break で「正常終了のタイミング」を明示することで、
入力エラーと正常入力の分岐を簡潔に書けます。


パターン④:入れ子ループで特定条件を検出(ラベル付き break)

シーン

二重ループで「1件でも条件に一致したら全部抜けたい」ケース。

コード例

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

boolean found = false;

Outer:
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        if (matrix[i][j] == 5) {
            System.out.println("値 5 を発見! 位置: (" + i + ", " + j + ")");
            found = true;
            break Outer; // 外側のループもまとめて抜ける
        }
    }
}

if (!found) {
    System.out.println("値が見つかりませんでした");
}
Java

実務解説

「二重 for でテーブル検索」など、データ解析系でよく使われます。
普通の break だと内側しか抜けないため、ラベル付き break
外側も一気に抜けるのがポイントです。


パターン⑤:異常値やエラー検知で早期終了

シーン

処理中に「エラーや無効データ」を検出した場合に、
「これ以上続けても意味がない」→ ループを途中で打ち切る。

コード例

List<Integer> scores = List.of(80, 70, -1, 90, 85);

for (int score : scores) {
    if (score < 0) {
        System.err.println("エラー: 不正なスコア " + score + " 検出。処理を中断します。");
        break; // 早期終了
    }
    System.out.println("スコア: " + score);
}

System.out.println("終了処理を実行中...");
Java

実務解説

業務では「想定外データ検出でループ中断」は頻出。
break により「安全に止める」動作を明示できます。
→ ログ出力・後処理(DBクローズ、リソース解放)と組み合わせて使います。


補足:Stream API に置き換えられる場合

近年の Java(8+)では、一部の break パターンを Stream で書き換えることもあります。
例:検索処理(パターン①)は下のようにできます。

Optional<String> foundUser = users.stream()
    .filter(name -> name.equals(target))
    .findFirst();

foundUser.ifPresentOrElse(
    name -> System.out.println("見つけたユーザー: " + name),
    () -> System.out.println("該当ユーザーなし")
);
Java

ただし、Stream では複雑なループ制御(ラベル付き break など)はできません。
「break が必要な複雑な条件ループ」→ 拡張 for 文が依然として実務的です。


まとめ表(実務パターン早見)

パターン名主な用途書き方の特徴補足
検索処理値が見つかったら終了if(一致) break;.findFirst() でも可
リトライ処理成功したら抜けるカウンタ+break上限管理に注意
入力検証正しい入力で抜けるwhile(true)+break無限ループ安全化
ラベル付きbreak二重ループをまとめて抜けるbreak ラベル名;可読性に注意
異常値検知不正値発見で中断if(異常) break;ログ・後処理と併用
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました