C# の if 文と switch 文の基礎

概要

C# の if 文と switch 文は、プログラムにおける条件分岐を実現するための基礎的な構文です。ここでは、その構文と使い方、およびパターンマッチングについても解説します。


1. if

if 文は、条件に基づいて処理を分岐するために使用されます。複数の条件を柔軟に評価できる為、普段の条件分岐に適しています。

構文

if (条件)
{
    // 条件が true の場合に実行されるコード
}
else if (別の条件)
{
    // 最初の条件が false で、別の条件が true の場合に実行されるコード
}
else
{
    // すべての条件が false の場合に実行されるコード
}

int score = 85;

if (score >= 90)
{
    Console.WriteLine("評価: A");
}
else if (score >= 75)
{
    Console.WriteLine("評価: B");
}
else if (score >= 50)
{
    Console.WriteLine("評価: C");
}
else
{
    Console.WriteLine("評価: D");
}

2. switch

switch 文は、特定の値に基づいて処理を分岐させるために使用されます。if 文に比べて、値の分岐が多い場合にコードを簡潔にすることができます。

構文

switch (式)
{
    case 値1:
        // 式が値1と一致する場合に実行されるコード
        break;

    case 値2:
        // 式が値2と一致する場合に実行されるコード
        break;

    default:
        // どのケースにも一致しない場合に実行されるコード
        break;
}

int day = 3;

switch (day)
{
    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;
    default:
        Console.WriteLine("週末または無効な日");
        break;
}

3. パターンマッチング

C# 7以降では、パターンマッチングにより、型チェックや複雑な条件を簡潔に記述できます。

switch 文でのパターンマッチング

object obj = 42;

switch (obj)
{
    case int i when i > 50:
        Console.WriteLine($"大きい数値: {i}");
        break;
    case int i:
        Console.WriteLine($"数値: {i}");
        break;
    case string s:
        Console.WriteLine($"文字列: {s}");
        break;
    case null:
        Console.WriteLine("null値");
        break;
    default:
        Console.WriteLine("未対応の型");
        break;
}

if 文でのパターンマッチング

object obj = "Hello, World!";

if (obj is string s)
{
    Console.WriteLine($"文字列の長さ: {s.Length}");
}
else if (obj is int i && i > 0)
{
    Console.WriteLine($"正の数値: {i}");
}
else
{
    Console.WriteLine("その他の型または条件に一致せず");
}

switch 式の導入 (C# 8以降)

int score = 85;

string grade = score switch
{
    >= 90 => "A",
    >= 75 => "B",
    >= 50 => "C",
    _ => "D"
};

Console.WriteLine($"評価: {grade}");

4. パターンの種類

型パターン

if (obj is string s)
{
    Console.WriteLine($"文字列: {s}");
}

値パターン

int x = 10;
if (x is 10)
{
    Console.WriteLine("値は10です");
}

条件付きパターン (when)

if (x is > 0 and < 100)
{
    Console.WriteLine("0より大きく100未満");
}

タプルパターン

(int x, int y) point = (1, 2);

string result = point switch
{
    (0, 0) => "原点",
    (0, _) => "X軸上",
    (_, 0) => "Y軸上",
    _ => "その他の点"
};

Console.WriteLine(result);

リストパターン (C# 11以降)

int[] numbers = { 1, 2, 3 };

string result = numbers switch
{
    [1, 2, 3] => "1, 2, 3の配列",
    [1, ..] => "1で始まる配列",
    _ => "その他の配列"
};

Console.WriteLine(result);

まとめ

  • if 文: 柔軟な条件や範囲チェックに適している。
  • switch 文: 固定値や特定パターンの分岐が簡潔に書ける。
  • パターンマッチング: 型や条件を組み合わせた分岐を簡潔に記述可能。
  • switch 式: 分岐結果を変数に許可に記述可能。

C# の条件分岐機能を最適な場合に使い分けることで、コードの可読性や効率を高めましょう。

C#

Posted by hidepon