【C#】C#制御構文の基本 - 簡単に理解する条件分岐とループの使い方

PUBLISHED 2024-08-19

プログラミングでは、決まった順序でしか動かないと、実用的なプログラムが作れません。そこで登場するのが制御構文です。制御構文を使うと、プログラムの流れを変えたり、同じ処理を繰り返したりできます。これをうまく使いこなすと、柔軟で賢いプログラムを作ることができるようになります。

今回は、C#の主要な制御構文であるif文、switch文、forループ、whileループについて、わかりやすく解説していきます。

この記事で学べること

  • if文による条件分岐の基本と応用
  • switch文で複数の選択肢を効率的に処理する方法
  • for/foreachループによる繰り返し処理
  • while/do-whileループの使い分け
  • break/continueによるループ制御
  • 制御構文の組み合わせ方

制御構文の種類と用途

C#の制御構文は大きく2種類に分けられます。

種類構文用途
条件分岐if, switch条件に応じて実行する処理を選択
ループfor, foreach, while, do-while同じ処理を繰り返し実行

if文

if文は「もしも~なら」という条件を使って、どの処理を実行するかを決めるために使います。たとえば、スーパーでレジに立っている時、「もし20歳以上ならお酒を売る」といった場面をプログラムにするなら、if文を使います。

基本的な if 文

「もし20歳以上なら成人」と表示するプログラムはこんな感じです。

int age = 20;
if (age >= 18)
{
    Console.WriteLine("成人です。");
}

この場合、年齢が18歳以上なら「成人です。」というメッセージが表示されます。

if-else 文

「もし合格点を取ったら合格、それ以外は不合格」といった場合、elseを使って次のように書けます。

int score = 75;
if (score >= 60)
{
    Console.WriteLine("合格です。");
}
else
{
    Console.WriteLine("不合格です。");
}

この例では、点数が60点以上なら「合格」、それ未満なら「不合格」と表示されます。

if-else if-else 文

条件がいくつかある場合はどうするのでしょう?たとえば、成績に応じて「A」「B」「C」「D」を表示するなら、else ifを使ってこう書きます。

int grade = 85;
if (grade >= 90)
{
    Console.WriteLine("A");
}
else if (grade >= 80)
{
    Console.WriteLine("B");
}
else if (grade >= 70)
{
    Console.WriteLine("C");
}
else
{
    Console.WriteLine("D");
}

これで、点数に応じて適切な成績が表示されるようになります。

三項演算子(条件演算子)

もしもif-else文が1行で済むなら、三項演算子を使うことで短く書くことができます。たとえば、「成人」か「未成年」を判定する場合です。

int age = 20;
string status = (age >= 18) ? "成人" : "未成年";
Console.WriteLine(status);

このコードは、if-elseを短くした形ですが、同じ働きをします。

switch文

switch文は、「どの条件が当てはまるか」によって、複数の選択肢から1つの処理を選ぶときに使います。たとえば、「今日は何曜日?」という質問に対して、月曜なら「月曜日」、火曜なら「火曜日」と表示する場合、switch文が便利です。

基本的な switch 文

たとえば、曜日に応じて違うメッセージを表示するなら、次のように書きます。

int dayNumber = 3;
switch (dayNumber)
{
    case 1:
        Console.WriteLine("月曜日");
        break;
    case 2:
        Console.WriteLine("火曜日");
        break;
    case 3:
        Console.WriteLine("水曜日");
        break;
    case 4:
        Console.WriteLine("木曜日");
        break;
    case 5:
        Console.WriteLine("金曜日");
        break;
    case 6:
    case 7:
        Console.WriteLine("週末");
        break;
    default:
        Console.WriteLine("無効な日数");
        break;
}

このコードでは、曜日の数字に応じてメッセージが変わります。数字が6か7なら「週末」と表示され、それ以外の場合は対応する曜日が表示されます。

switch式(C# 8.0以降)

C# 8.0以降では、より簡潔なswitch式を使うことができます。

int dayNumber = 3;
string dayName = dayNumber switch
{
    1 => "月曜日",
    2 => "火曜日",
    3 => "水曜日",
    4 => "木曜日",
    5 => "金曜日",
    6 or 7 => "週末",
    _ => "無効な日数"  // defaultの代わりに _ を使用
};
Console.WriteLine(dayName);

switch式は値を返すため、変数への代入がシンプルになります。

パターンマッチング

C#では、switch文でパターンマッチングを使用できます。

object value = 42;

string result = value switch
{
    int n when n > 0 => "正の整数",
    int n when n < 0 => "負の整数",
    int => "ゼロ",
    string s => $"文字列: {s}",
    null => "null",
    _ => "その他の型"
};
Console.WriteLine(result);  // 出力: 正の整数

forループ

forループは、決まった回数だけ何度も繰り返し処理を実行するための構文です。たとえば、「りんごを5個並べる」という作業をプログラムにすると、forループが役立ちます。

基本的な for ループ

たとえば、カウントを5回表示するプログラムはこんな感じです。

for (int i = 0; i < 5; i++)
{
    Console.WriteLine($"カウント: {i}");
}

これを実行すると、0から4までの数字が順番に表示されます。

配列やコレクションの反復処理

複数のデータが並んでいる「配列」もforループで簡単に処理できます。たとえば、フルーツの名前を表示する場合は次のように書きます。

string[] fruits = { "りんご", "バナナ", "オレンジ" };
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

これで、りんご, バナナ, オレンジが順番に表示されます。

foreach ループ

foreachループを使えば、配列の要素をもっと簡単に反復処理できます。

string[] colors = { "赤", "青", "緑" };
foreach (string color in colors)
{
    Console.WriteLine(color);
}

このコードでは、各色が順番に表示されます。

whileループ

whileループは、ある条件が満たされる限り、何度でも繰り返す処理を実行します。たとえば、「車の燃料がある限り走る」といった場合、whileループが使えます。

基本的な while ループ

たとえば、5回カウントするプログラムは次のように書けます。

int count = 0;
while (count < 5)
{
    Console.WriteLine($"カウント: {count}");
    count++;
}

このコードでは、カウントが5になるまで、ループが繰り返されます。

do-while ループ

do-whileループは、少なくとも1回は処理を実行してから、条件をチェックします。たとえば、数字を入力するプログラムにぴったりです。

int number;
do
{
    Console.Write("1から10までの数字を入力してください: ");
    number = int.Parse(Console.ReadLine());
} while (number < 1 || number > 10);

Console.WriteLine($"入力された数字: {number}");

このコードでは、1から10までの数字が入力されるまで、何度でも入力を求められます。

ループ制御(break と continue)

ループの途中で処理を制御したい場合、breakcontinueを使います。

break - ループを途中で終了

breakを使うと、条件に関係なくループを即座に終了できます。

// 5を見つけたらループを終了
for (int i = 0; i < 10; i++)
{
    if (i == 5)
    {
        Console.WriteLine("5を見つけました!ループを終了します");
        break;
    }
    Console.WriteLine($"現在の値: {i}");
}
// 出力: 0, 1, 2, 3, 4, "5を見つけました..."

continue - 現在の繰り返しをスキップ

continueを使うと、現在の繰り返しをスキップして次の繰り返しに進みます。

// 偶数だけをスキップして奇数のみ表示
for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0)
    {
        continue;  // 偶数の場合はスキップ
    }
    Console.WriteLine($"奇数: {i}");
}
// 出力: 1, 3, 5, 7, 9

ループ制御の比較

キーワード動作使用例
breakループを完全に終了検索で目的の値を見つけた時
continue現在の繰り返しをスキップ条件に合わない要素を無視
returnメソッド自体を終了ループ内で結果を返す

制御構文の組み合わせ

実際のプログラムでは、これらの制御構文を組み合わせて使うことが一般的です。たとえば、1から10までの数字を調べて、偶数か奇数かを判定するプログラムは次のように書けます。

for (int i = 1; i <= 10; i++)
{
    if (i % 2 == 0)
    {
        Console.WriteLine($"{i} は偶数です");
    }
    else
    {
        Console.WriteLine($"{i} は奇数です");
    }
}

このコードでは、1から10までの数字が順に表示され、偶数か奇数かを判定しています。

まとめ

C#の制御構文は、プログラムの流れをコントロールするために欠かせない道具です。if文で条件分岐を行い、switch文で選択肢を整理し、forwhileループで繰り返し処理を実行します。

これらの構文を組み合わせることで、より複雑で柔軟なプログラムを作成することができるようになります。

ポイントの振り返り

制御構文主な用途特徴
if文条件分岐真偽値による分岐、else ifで複数条件
switch文複数選択値のマッチング、パターンマッチング
for文回数指定ループカウンタ変数を使った繰り返し
foreach文コレクション反復配列やリストの全要素を処理
while文条件ループ条件が真の間繰り返し
do-while文後判定ループ最低1回は実行される

参考文献

CATEGORY
TAGS
円