1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2024

Day 6

Switch文はもう古い!Switch式でコンパクトに書こう!

Posted at

Switch式とは?

C#8.0で導入されたSwitch式は、従来のSwitch文をより簡潔に記述できる構文です。

具体的には、以下のような違いがあります。

相違点  Switch文  Switch式 
用途  複雑な処理  簡潔な処理
書き方  詳細な構文  簡潔な式
網羅性の確認  手動で行う  コンパイラが自動的に行う 

用途と書き方については、実際のコードを例に説明します。

以下は、int型の変数(number)の値に応じて異なる内容を出力するコードです。

// Switch文の場合
int number = 0;

switch (number)
{
    case 1:
        Console.WriteLine("One");
        break;
    case 2:
        Console.WriteLine("Two");
        break;
    case 3:
        Console.WriteLine("Three");
        break;
        
    default:
        Console.WritrLine("Other number");
        break;
}
// Switch式の場合
int number = 0;

string result = number switch
{
    1 => "One",
    2 => "Two",
    3 => "Three",
    _ => "Other number"
};

Console.WriteLine(result);

どうでしょうか?
Switch式の場合は、かなり簡潔にまとめられていると思います。
このように、Switch式Switch文と比較して簡潔な処理に向いているといえます。

また、Switch式のコードでdefaultとして扱っている「 _ 」は、
ディスカードと呼ばれているもので、「値を破棄するための特別な変数」を意味します。

Switch式ではSwitch文の「default」にあたる「その他すべて」を表し、
下記のような場合にも使用することが出来ます。

// タプルから特定の値だけを取り出し、不要な値を無視する場合
var (x, _, z) = (1, 2, 3);
Console.WriteLine(x);
Console.WriteLine(z);

// メソッドのoutパラメーターに用いて、不要な値を破棄する場合
if (int.TryParse("123", out _))
{
    Console.WriteLine("Success!.")
}

話が逸れましたが、Switch文Switch式の違いに戻ります。
最後に網羅性の確認についてですが、以下のような違いがあります。

Switch文の場合は、コンパイラが自動的に確認しないため、
漏れがあった場合は実行時エラーになる可能性があります。

Switch式の場合は、コンパイラが全ての条件を確認するので、
漏れがあった場合はエラーや警告を表示してくれます。

以上がSwitch文Switch式の違いになります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?