CodeGym /コース /C# SELF /ループの制御: break と continue の使い方

ループの制御: break と continue の使い方

C# SELF
レベル 4 , レッスン 4
使用可能

1. はじめに

よくあるんだけど、ループのすべてのイテレーションを最後まで回す必要がなくて、途中で抜けたいときがあるよね ― 例えば、探してる要素を見つけた瞬間とか。他にも、ある処理だけスキップして次のステップに進みたいとき(たとえば、データを読んで、その処理をスキップしたい場合とか)。 これがループ内でのフロー制御ってやつ。

C#の breakcontinue はまさにこのためにあるんだ。どうやって動くのか、実際にどんな場面で使えるのか、一緒に見ていこう!

2. break 演算子: 「ストップ!」

理論と構文

break は、ループのどこにいても即座にループから抜けるために使うよ。プログラムの実行が break に到達した瞬間、ループはすぐに終了して、ループの後の最初のコード行から実行が続くんだ。


while (joken)
{
    if (nanika-no-joken)
    {
        break;
    }
    // loop no nokori no code
}
breakwhile ループで使う例

同じことは fordo-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 が実行されなかったときだけ動く
}
continuefor ループで使う例

例3: 偶数をスキップする

たとえば、範囲内の奇数だけを出力したいとき。偶数はスキップしたいよね。


for (int i = 1; i <= 10; i++)
{
    if (i % 2 == 0)
    {
        continue; // 数が偶数なら、以下はスキップ!
    }
    Console.WriteLine("kisu: " + i);
}
continue で偶数をスキップする例

何が起きてるか:
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
... ... ...

breakcontinue はめっちゃよく使うよ。実際、2回に1回くらいのループで出てくる。きっと使いこなすのが楽しくなるはず!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION