ラベル付きcontinue
外側のループの次の反復へ進みます。
「ラベル付きcontinue」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
外側のループを続ける
通常の continue で再開されるのは内側のループだけです。場合によっては、外側のループの次の繰り返しへスキップしたいことがあります。
そのために、Java にはラベル付き continueがあります。
ループのラベルと continue キーワードを組み合わせ、どのループを進めるかを制御します。
ラベル付き continue の構文
構文は continue label; です。label には、外側のループのラベルを指定します。
内側のループを先へ進める代わりに、ラベル付きループの次の繰り返しへ移ります。
その繰り返しで内側のループに残っている処理はすべてスキップされます。
continue outer; // jump to next iteration of 'outer'最初の例
ここでは、col が 2 になったら外側のループへ continue します。
これにより内側のループの残りの処理を中止し、すぐに次の行へ移ります。
public class Main {
public static void main(String[] args) {
outer:
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (col == 2) {
continue outer;
}
System.out.println("row " + row + ", col " + col);
}
}
}
}出力の読み取り
各行では col 1 だけが出力されました。col が 2 になると、continue outer によって次の行へ直接移ったためです。
どの行でも col 2 と col 3 は一度も出力されませんでした。
新しい行に移るたびに、内側のループは col 1 から再開されました。
continue と continue label の比較
通常の continue と比較してみましょう。通常の continue なら col 2 だけをスキップし、col 3 は出力します。
実行して、すべての行で col 1 と col 3 の両方が表示されることを確認してください。
public class Main {
public static void main(String[] args) {
for (int row = 1; row <= 3; row++) {
for (int col = 1; col <= 3; col++) {
if (col == 2) {
continue;
}
System.out.println("row " + row + ", col " + col);
}
}
}
}重要な違い
通常の continue は現在の内側の繰り返しだけをスキップするため、内側のループは実行を続けます。
ラベル付きの continue outer は内側のループ全体を中止し、外側のループの次の繰り返しを開始します。
この1つのラベルによって、スキップされるコードの範囲が変わります。
行全体をスキップする
ラベル付き continue は、1つの不正な値によって内側の処理の残り全体を無効にしたい場合に便利です。
ここでは、行内の数値が1つでも負の場合、その行の残りの処理をスキップして次へ進みます。
public class Main {
public static void main(String[] args) {
int[][] data = {{1, 2, 3}, {4, -1, 6}, {7, 8, 9}};
rows:
for (int r = 0; r < data.length; r++) {
int sum = 0;
for (int c = 0; c < data[r].length; c++) {
if (data[r][c] < 0) {
System.out.println("Row " + r + " skipped");
continue rows;
}
sum += data[r][c];
}
System.out.println("Row " + r + " sum = " + sum);
}
}
}例の流れを追う
行 0 と行 2 では合計が出力されました。行 1 では負の値に遭遇し、「Row 1 skipped」と出力して次の行へ移りました。
重要なのは、ラベル付き continue がその行を越えてスキップしたため、行 1 の合計行は実行されなかったことです。
ペアのフィルタリング
別の用途として、内側の条件が成立しなくなった瞬間に、外側の項目全体をスキップできます。
このループはペアを出力しますが、i と j の積が 6 を超える可能性がある i はスキップします。
public class Main {
public static void main(String[] args) {
loopI:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j > 6) {
continue loopI;
}
System.out.println(i + " x " + j + " = " + (i * j));
}
}
}
}ラベル名と配置
ラベル付きループは、continue 文を囲んでいなければなりません。自分より上にないラベルへ continue することはできません。
どのループが進むのか分かるように、rows や loopI のような説明的な名前を選んでください。
明確なラベルは、それ自体がドキュメントになります。
役立つ場合と害になる場合
ラベル付き continue は、条件によって内側の処理の残りを無効にし、次へ進みたい場合に役立ちます。
ただし、ラベルを使いすぎると処理の流れを追いにくくなります。通常の continue やメソッドの早期 return のほうが簡潔に読めるなら、そちらを選んでください。
本当に意図を明確にできる場合だけラベルを使いましょう。
理解度チェック
ラベル付き continue の効果を予測してみましょう。
まとめ
continue label; は内側のループの残りをスキップし、名前付きの外側のループを次の繰り返しへ進めます。
内側の1回分だけをスキップする通常の continue とは異なります。複数のループのロジックが明確になる場合にラベルを使い、単にコードを短くするためだけには使わないでください。
よくある質問
「ラベル付きcontinue」レッスンは無料ですか?
はい。「ラベル付きcontinue」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「ラベル付きcontinue」で何を学びますか?
外側のループの次の反復へ進みます。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ラベル付きcontinue」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- breakとcontinue
- ラベル付きbreak
- ラベル付きcontinue
- スパゲッティな処理フローを避ける