C#でループの中に条件分岐を書く方法!入れ子制御構造の基本
生徒
「C#で繰り返し処理をしている途中で、条件によって違う動きをさせることってできますか?」
先生
「はい、できますよ。C#ではループの中にif文を入れることで、条件に応じた処理を繰り返すことができます。」
生徒
「それって難しくないですか?どんな風に書くのか想像がつかなくて…」
先生
「心配いりません。とてもシンプルなので、一緒に見ていきましょう!」
1. ループとは?
ループとは、同じ処理を何回も繰り返して行うためのしくみです。たとえば、数字を1から10まで順番に表示したいときなどに使います。
C#では、for文、while文、foreach文などのループがあります。この記事では、代表的なfor文を使って説明します。
2. 条件分岐とは?
条件分岐とは、「ある条件に合っているかどうか」によって処理を変えることです。C#では、if文を使って条件分岐を行います。
たとえば、「もしスコアが60点以上だったら合格と表示する」といった処理ができます。
3. ループの中にif文を入れるとは?
for文などのループの中に、if文を組み合わせることで、繰り返しの中で条件に応じた処理を行うことができます。これを「入れ子(ネスト)構造」といいます。
たとえば、「1から10までの数字のうち、偶数だけを表示したい」といった処理に使えます。
4. 具体的なコード例を見てみよう
以下は、1から10までの数字をループで回して、その中で偶数だけを表示する例です。
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
Console.WriteLine(i + " は偶数です。");
}
}
実行結果:
2 は偶数です。
4 は偶数です。
6 は偶数です。
8 は偶数です。
10 は偶数です。
5. コードの解説
for (int i = 1; i <= 10; i++)の部分は、「iを1から始めて10まで1ずつ増やしながら繰り返す」という意味です。
if (i % 2 == 0)は、「iを2で割った余りが0、つまり偶数のときに」という条件です。
このように、ループの中に条件分岐を入れることで、「繰り返しの中でも、条件を見て処理を分ける」ということができます。
6. もっとわかりやすい例で確認しよう
次は、10人の生徒のテストの点数があって、60点以上なら「合格」と表示する例です。
int[] scores = { 55, 78, 62, 45, 90, 33, 70, 85, 59, 60 };
for (int i = 0; i < scores.Length; i++)
{
if (scores[i] >= 60)
{
Console.WriteLine((i + 1) + "番目の生徒は合格です(" + scores[i] + "点)");
}
}
実行結果:
2番目の生徒は合格です(78点)
3番目の生徒は合格です(62点)
5番目の生徒は合格です(90点)
7番目の生徒は合格です(70点)
8番目の生徒は合格です(85点)
10番目の生徒は合格です(60点)
7. 入れ子構造の注意点
入れ子(ネスト)が深くなりすぎると、コードが読みにくくなったり、バグの原因になったりします。
たとえば、ループの中にifがあって、さらにその中に別のifがあると、だんだん見づらくなってしまいます。
なるべく入れ子を深くしすぎず、処理を分けたり、メソッドを使って整理するのがよい方法です(今回はメソッドの説明は省略)。
8. 入れ子構造の応用アイデア
ループの中にif文を入れるテクニックは、いろんな場面で使えます。たとえば:
- 複数の条件に応じて、異なるメッセージを出す
- 条件に応じて合計点を計算する
- 特定の条件を満たすデータだけを処理する
現実のプログラムでもとてもよく使う基本テクニックなので、しっかり身につけておきましょう。
まとめ
C#でループと条件分岐を組み合わせることで、実際のアプリケーションやシステム開発でも非常に応用の利く処理が書けるようになります。特にfor文やforeach文とif文を入れ子にして使うテクニックは、業務システムやゲーム開発、ウェブアプリケーションのロジック設計など、さまざまな場面で活躍します。たとえば、商品の在庫リストの中から特定の条件を満たす商品だけを表示したり、ログファイルから特定のエラーだけを抽出したりする場面では、この入れ子構造が非常に役に立ちます。
入れ子構造は便利な一方で、処理の階層が深くなりすぎると可読性が損なわれることがあります。そのため、条件が複雑な場合にはメソッドに分けて整理したり、変数名に意味を持たせたりしてコードの意図を明確にする工夫が大切です。また、条件文の内容をコメントで補足しておくことで、将来の保守性も向上します。
ループ処理と条件分岐は、プログラムの中で最もよく使われる構文のひとつです。これを自由に扱えるようになれば、データ処理や制御フローにおいて強力な武器となります。初めはシンプルな例から試して、徐々に実践的なケースに応用していくと、自然に身についていくでしょう。
たとえば、以下のようにループ内で複数の条件を分岐して処理を変えることも可能です:
int[] scores = { 95, 72, 58, 40, 87 };
for (int i = 0; i < scores.Length; i++)
{
if (scores[i] >= 80)
{
Console.WriteLine((i + 1) + "番目の生徒は優秀です(" + scores[i] + "点)");
}
else if (scores[i] >= 60)
{
Console.WriteLine((i + 1) + "番目の生徒は合格です(" + scores[i] + "点)");
}
else
{
Console.WriteLine((i + 1) + "番目の生徒は再試験です(" + scores[i] + "点)");
}
}
このように、if-else文をループ内に組み合わせることで、複数の評価基準を持つ処理を一気にこなすことができます。また、特定の条件を満たすデータだけをフィルタリングするなどの処理にも応用できます。
条件が単純なうちはif文で十分ですが、条件が複数重なる場合や、より複雑な分岐が必要な場合にはswitch文との使い分けも検討してみてください。C#では、バージョンアップに伴いswitch式も使いやすくなっており、コードの見通しを良くする助けになります。
最後に、入れ子構造は一見難しそうに感じるかもしれませんが、順序立てて書けば意外とシンプルです。むしろ、しっかり理解して活用すれば、プログラムの動きをより細かくコントロールできるようになります。今後の学習でも、繰り返し処理と条件分岐の組み合わせは頻繁に登場しますので、今回の内容をしっかりと身につけておくと安心です。
生徒
「ループの中に条件分岐を入れることで、いろんな場面で細かい制御ができるようになるんですね!」
先生
「その通りです。データの分類、条件ごとの処理、ユーザー入力のチェックなど、実際の開発現場でもよく使われますよ。」
生徒
「ただ、ネストが深くなりすぎると読みにくくなるってことも覚えておかないとですね…」
先生
「そうですね。必要な場面ではしっかり使いつつ、見やすく整理されたコードを書く意識を持つと、よりよいプログラマになれますよ。」