ループ (中断して戻る、続行、ラベル) - 1

「こんにちは、アミーゴ!」

今日はループを扱うときに便利なことをいくつかお話します。

「1 つ目は、キーワードBreakです。このコマンドをループの本体で使用すると、コマンドが実行されるとすぐにループが終了します。例を次に示します。」

出力:
for (int i = 0; i < 10; i++)
{
System.out.println(i);
if (i > 5)
break;
}
0
1
2
3
4
5

「ブレークはループ内でのみ使用できますか?」

「はい。break ステートメントはループ内でのみ使用できます。break ステートメントが実行されると、ループは直ちに終了します。」

"はい、わかった。"

「素晴らしいです。次に共有したいのは、キーワード continue です。これもループ内でのみ使用できます。このコマンドが実行されると、ループの新しい反復が直ちに開始されます。つまり、ループの本体は単純にスキップされます。」

「ここに例があります:」

出力:
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue;
System.out.println(i);
}
1
3
5
7
9

「では、プログラムがループ内の continue コマンドに到達すると、ループ内のコードの実行を停止するということですか?」

「いいえ、同じコードを複数回実行するとループができます。上の例では、0 から 9 までのループがあります。つまり、ループの本体は 10 回実行されます。そうですか?」

"はい。"

「ループ本体の 1 回のパスは反復と呼ばれます。私たちのループは 10 回の反復で構成されており、ループ本体は 10 回実行されます。」

「はい、それは明らかです。」

continueコマンドは現在の反復を途中で終了します。つまり、ループ内の残りのコードはスキップされ、新しい反復が始まります。」

「別の例を次に示します。」

ArrayList list = new ArrayList();
for (Object o: list)
{
if (o == null) continue;
System.out.println(o.toString());
}

「この例では、リスト内のすべてのオブジェクトの文字列表現を表示します。ただし、null のオブジェクトはスキップします。」

「わかりました。これがいかに便利かわかりました。」

「はい。ラベルについてもお話したいと思います。ラベルはプログラムのロジックの美しさに反することが多いため、Java ではめったに使用されません。しかし、コード内でラベルを使用することがあるかもしれません。そこで、むしろラベルについてお話したいと思います。」遊び場で彼らのことを聞くよりも。」

「かつては、コード内の任意の行から任意の行にジャンプすることが許可されていました。ラベルと goto ステートメントを使用してこれを実行しました。以下がその様子です。」

ラベル付きのひどいコード
System.out.println("Make cookies,");
label: System.out.println("not");
System.out.println("war");
goto label;

この例では、goto labelコマンドが実行された後、プログラムはlabelとマークされた行にジャンプします。

「その後、皆が賢明になって、gotoステートメントを使用しないことにしました。Java は goto をサポートしていませんが、goto は予約語です。大したことではありません…」

「では、Java には goto もラベルもありませんか?」

「goto文はないけどラベルはある!」

「どうしてそんなことがあり得るの?」

「Java では、ラベルは continue および Break コマンドで使用できます。これらは、ネストされたループが多数ある場合に使用されます。」

「たとえば、ネストされたループが 5 つあり、何らかの条件が満たされたときに、それらのすべてではなく、そのうちの 3 つから抜け出したいとします。ラベルはこれを行うための洗練された方法です。」

label1: for (int i = 0; i < 10; i++)
 label2: for (int j = 0; j < 10; j++)
  label3: for (int k =0; k < 10; k++)
   if (i == j && j == k)
    break label2;

「この例では、break ステートメントが実行されると、変数 k のループからではなく、label2 というラベルの付いたループから終了します。つまり、k と j の 2 つのループをすぐに終了します。」

「それはどれくらいの頻度で使われますか?」

「正直に言うと、頻繁ではありませんが、決してわかりません。もしかしたら、いつか目にするかもしれません。これらは構文の基礎です。これらすべてを知っておく必要があります。」

「わかりました。ありがとう、ビラーボ。」