C#におけるswitch文とswitch式の違い

2024年12月24日

C#8.0で導入されたswitch式は、従来のswitch文に比べて簡潔で可読性の高い記述を可能にします。本記事では、両者の違いを具体例とともに解説します。

サンプル1: 数値を用いたswitchの基本的な使い方

従来のswitch文

以下は従来のswitch文を使用した例です。このコードは、ユーザーが選択した時間帯に応じて対応するメッセージを表示します。

// ユーザーに時間帯の選択を促す
Console.WriteLine("ご希望の時間帯の番号を選択してください。");
Console.WriteLine(" 1: 10時から12時");
Console.WriteLine(" 2: 13時から15時");
Console.WriteLine(" 3: 15時から18時");
var line = Console.ReadLine();
var value = int.Parse(line);

switch (value)
{
    case 1:
        Console.WriteLine("10時から12時がご希望ですね。");
        break;
    case 2:
        Console.WriteLine("13時から15時がご希望ですね。");
        break;
    case 3:
        Console.WriteLine("15時から18時がご希望ですね。");
        break;
    default:
        Console.WriteLine("入力した値に誤りがあります。");
        break;
}

switch式による簡潔な記述

次の例では、switch式を使用して従来の記述をより簡潔に書き換えています。

// ユーザーに時間帯の選択を促す
Console.WriteLine("ご希望の時間帯の番号を選択してください。");
Console.WriteLine(" 1: 10時から12時");
Console.WriteLine(" 2: 13時から15時");
Console.WriteLine(" 3: 15時から18時");
var line = Console.ReadLine();

if (int.TryParse(line, out var value))
{
    var message = value switch
    {
        1 => "10時から12時がご希望ですね。",
        2 => "13時から15時がご希望ですね。",
        3 => "15時から18時がご希望ですね。",
        _ => "入力した値に誤りがあります。"
    };
    Console.WriteLine(message);
}
else
{
    Console.WriteLine("入力が有効な整数ではありません。");
}

サンプル2: 文字列を用いたswitchの応用

従来のswitch文

次は、文字列の値に基づいて略語の意味を出力する従来のswitch文の例です。

// ユーザーに略語の入力を促す
var word = Console.ReadLine();
var term = "";

switch (word)
{
    case "API":
        term = "Application Programming Interface";
        break;
    case "RDB":
        term = "Relational Database";
        break;
    case "UI":
        term = "User Interface";
        break;
}

if (term != "")
{
    Console.WriteLine("{0}は {1} の略です。", word, term);
}

switch式による簡潔な記述

switch式を用いることで、記述をシンプルにできます。

// ユーザーに略語の入力を促す
Console.WriteLine("略語を入力してください (例: API, RDB, UI):");
var word = Console.ReadLine();

var term = word switch
{
    "API" => "Application Programming Interface",
    "RDB" => "Relational Database",
    "UI" => "User Interface",
    _ => ""
};

if (term != "")
{
    Console.WriteLine("{0}は {1} の略です。", word, term);
}
else
{
    Console.WriteLine("入力した略語は定義されていません。");
}

解説

switch式の利点

  1. 簡潔性: 従来のswitch文に比べて記述が短くなります。
  2. エラー回避: 各ケースでbreakを記述する必要がないため、記述漏れによるエラーを防げます。
  3. デフォルトケース: _を用いることで簡単にデフォルト処理を指定できます。
  4. 式としての利用: switch式は値を返すため、他の式や変数への代入に直接利用可能です。

適用場面

  • 条件分岐が多い場合でも簡潔に記述したい場面。
  • 戻り値が必要な条件分岐を記述する際。

実行結果の例

サンプル1の結果

入力例1:

2

出力例1:

13時から15時がご希望ですね。

入力例2:

4

出力例2:

入力した値に誤りがあります。

サンプル2の結果

入力例1:

API

出力例1:

APIは Application Programming Interface の略です。

入力例2:

XYZ

出力例2:

入力した略語は定義されていません。

比較表

特徴従来のswitch文新しいswitch式
記述の簡潔さやや冗長簡潔
breakの必要性必須不要
デフォルト処理default_
式として利用可能不可可能

C#8.0で導入されたswitch式は、記述の簡潔性と可読性を向上させるための非常に有用な機能です。条件分岐を頻繁に利用するプログラムにおいて、その利点を最大限に活用しましょう。

C#

Posted by hidepon