条件分岐とパターンマッチング(switch)

Swiftの「条件分岐」と「パターンマッチング(switch)」は、プログラムの実行の流れを制御するために使われます。特にswitch文は、単なる条件分岐だけでなく、強力なパターンマッチング機能を備えており、Swiftの特徴の一つです。


1. ifelse による条件分岐

基本構文:

swift
let number = 10 if number > 0 { print("正の数です") } else if number < 0 { print("負の数です") } else { print("0です") }
  • ifは条件がtrueの場合に実行されます。

  • else ifは複数の条件をチェックできます。

  • elseは全ての条件がfalseだった場合に実行されます。


2. switch 文によるパターンマッチング

switch文は値に対するさまざまなパターンをマッチさせて分岐処理を行います。Swiftのswitchは**網羅性(exhaustiveness)**が求められ、すべての可能性を処理する必要があります。

基本構文:

swift
let score = 85 switch score { case 0..<60: print("不合格") case 60..<80: print("合格") case 80...100: print("優秀") default: print("無効なスコア") }
  • ..< は半開区間(例: 0以上60未満)

  • ... は閉区間(例: 80以上100以下)

  • default はすべてのケースにマッチしない場合に必須


3. 複数の値とのマッチ

swift
let letter = "a" switch letter { case "a", "e", "i", "o", "u": print("母音です") default: print("子音です") }
  • 複数の値をカンマで区切って同じ処理をまとめられます。


4. where 節を使った条件付きマッチ

swift
let point = (x: 2, y: -2) switch point { case let (x, y) where x == y: print("xとyは等しい") case let (x, y) where x == -y: print("xとyは逆符号") default: print("その他の点") }
  • where を使うことで、より柔軟な条件を設定できます。


5. 値の束縛(let / var)による変数の取得

swift
let result = (true, 100) switch result { case (true, let score): print("合格:\(score)点") case (false, _): print("不合格") }
  • letでパターン内の値を変数に束縛できます。

  • _(ワイルドカード)を使えば特定の値を無視できます。


6. 列挙型との組み合わせ(enumのパターンマッチ)

Swiftのswitchは、列挙型との相性が非常に良いです。

swift
enum Direction { case north case south case east case west } let dir = Direction.east switch dir { case .north: print("北です") case .south: print("南です") case .east: print("東です") case .west: print("西です") }

列挙型がassociated valueを持つ場合もマッチできます。


まとめ

機能 説明
if-else 条件が複雑でない場合に使う基本的な分岐
switch 複数の条件を整理して分岐させたいときに使用
パターンマッチ タプル、範囲、列挙型など多様な形式に対応
where 条件をさらに細かく指定する
let / var バインディング 値を抽出してそのまま利用する

生成日:2025/05/04