1. はじめに
よくあるんだけど、ループのすべてのイテレーションを最後まで回す必要がなくて、途中で抜けたいときがあるよね ― 例えば、探してる要素を見つけた瞬間とか。他にも、ある処理だけスキップして次のステップに進みたいとき(たとえば、データを読んで、その処理をスキップしたい場合とか)。 これがループ内でのフロー制御ってやつ。
C#の break と continue はまさにこのためにあるんだ。どうやって動くのか、実際にどんな場面で使えるのか、一緒に見ていこう!
2. break 演算子: 「ストップ!」
理論と構文
break は、ループのどこにいても即座にループから抜けるために使うよ。プログラムの実行が break に到達した瞬間、ループはすぐに終了して、ループの後の最初のコード行から実行が続くんだ。
while (joken)
{
if (nanika-no-joken)
{
break;
}
// loop no nokori no code
}
同じことは for や do-while でもできるよ:
for (int i = 0; i < 10; i++)
{
if (nanika-no-joken)
{
break;
}
// loop no nokori no code
}
例1: 数が素数かどうかチェックする
数が素数っていうのは、1と自分自身でしか割り切れない数のこと。素数かどうか調べるには、2からn-1までのすべての割る数を試してみる。もし割り切れる数が見つかったら、それ以上調べる必要はない ― もう素数じゃないってことだから!そこでループを終わらせる。
例:
int kazu = 111;
bool mitsuketa = false;
for (int i = 2; i < kazu; i++)
{
if (kazu % i == 0)
{
mitsuketa = true;
Console.WriteLine("wareru su: " + i );
break; // ループを止める、もう探す必要なし!
}
}
if (!mitsuketa)
{
Console.WriteLine("wareru su wa nai - soshite sore wa sosuu.");
}
例2: ユーザー入力のバリデーション
ちょっとしたアプリを書いてみよう。たとえば、データを集めるためのインタラクティブなアンケートとか:
while (true)
{
Console.Write("jibun no nenrei wo nyuryoku shite: ");
string input = Console.ReadLine();
int nenrei;
if (int.TryParse(input, out nenrei) && nenrei > 0)
{
Console.WriteLine($"yatta! kimi no nenrei: {nenrei}");
break; // 正しいデータが入ったらループ終了!
}
else
{
Console.WriteLine("error! tadashii seisu no nenrei wo nyuryoku shite.");
}
}
なんでこれが必要なのか:
ときどき、ユーザーが正しいデータを入れるまで、ループをずっと(もしくはかなり長く)回し続けたいことがある。条件を満たすイベントが起きたら、break を使ってループから完全に抜けるんだ。
3. continue 演算子: 「次どうぞ!」
理論と構文
break と違って、continue はループ全体を終わらせるんじゃなくて、今のイテレーションだけ中断するんだ。ループの中で continue の後に書かれてるものは実行されず、すぐに次のイテレーションに進むよ。
for (int i = 0; i < 10; i++)
{
if (joken)
{
continue;
}
// この部分は continue が実行されなかったときだけ動く
}
例3: 偶数をスキップする
たとえば、範囲内の奇数だけを出力したいとき。偶数はスキップしたいよね。
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; // 数が偶数なら、以下はスキップ!
}
Console.WriteLine("kisu: " + i);
}
何が起きてるか:
i = 2, 4, 6... のとき、ループは continue に出会って、Console.WriteLine を実行せずにすぐ次のイテレーションに進むよ。
ステップごとの動きのイメージ:
| i | i % 2 == 0 | アクション |
|---|---|---|
| 1 | false | print, continue nai |
| 2 | true | continue, print nai |
| 3 | false | print, continue nai |
| 4 | true | continue, print nai |
| ... | ... | ... |
break と continue はめっちゃよく使うよ。実際、2回に1回くらいのループで出てくる。きっと使いこなすのが楽しくなるはず!
GO TO FULL VERSION