【要約】【C#】switch 式の when は何ができて、いつ使うのか [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者がC#のswitch式を用いる際、パターンマッチングのみでは記述できない複雑な条件分岐に直面する。従来の構文では、条件が複雑になるとコードの可読性が低下する課題がある。
- ・パターン構文では、メソッドの戻り値を用いた判定が記述できない。
- ・同一オブジェクト内の異なるプロパティ同士を比較することが困難である。
- ・これらを解決するためにif文を併用すると、switch式の簡潔さが失われる。
// Approach
開発者はwhen句(ガード節)を活用することで、パターン一致後の追加条件を柔軟に定義する。パターンで対象を絞り込み、その後に論理式を付与する手法をとる。
- ・パターンで変数を受け取り、whenの後にbool式を記述して条件を課す。
- ・プロパティパターンで取得した変数を、when句内で比較対象として利用する。
- ・関係パターンで表現可能な条件は、可読性のためにwhenを使わずパターン側で完結させる。
// Result
適切なwhen句の使い分けにより、コードの表現力と堅牢性の両立が可能になる。開発者は、ロジックの複雑さに応じた最適な記述を選択できる。
- ・パターンで書けない複雑なロジックを、簡潔なswitch式内に集約できる。
- ・評価順序や網羅性チェック(CS8846)の特性を理解し、実行時エラーを防げる。
- ・用途に応じて_(デフォルトケース)を使い分け、列挙型の拡張検知などの保守性を高められる。
Senior Engineer Insight
> 実戦においては、when句は強力な武器だが、網羅性チェックを弱める諸刃の剣である。特に大規模開発では、列挙型の追加漏れを検知したいケースが多い。その際、安易に_(デフォルトケース)を使用すると、コンパイラの警告を逃すリスクがある。また、when句の条件は実行時に評価されるため、評価順序のミスは致命的なバグに直結する。静的解析やコードレビューにおいて、when句の使用基準を明確に定めるべきだ。