Swiftのwhere句を使ったswitch文の高度な使い方を解説!初心者でも理解できる条件分岐の応用
生徒
「先生、Swiftのswitch文って使ったことあるんですけど、where句を使うともっと複雑なことができるって聞きました。どういう意味ですか?」
先生
「とても良いテーマですね。Swiftのswitch文では、where句を使うことで、より細かい条件で分岐処理ができるようになりますよ。」
生徒
「それってどうやって書くんですか?難しそう…」
先生
「大丈夫です!初心者でも理解できるように、順を追ってわかりやすく説明していきますね!」
1. Swiftのswitch文とは?
Swift(スウィフト)でよく使われるswitch文は、ある値に応じて異なる処理を分けるための構文です。if文よりも読みやすく、複雑な条件分けができるのが特徴です。
例えば、以下のように使います。
let fruit = "apple"
switch fruit {
case "apple":
print("リンゴです")
case "banana":
print("バナナです")
default:
print("その他の果物です")
}
リンゴです
このように、変数の値によって処理を分岐します。
2. where句とは?追加条件をつける構文
Swiftのwhere句は、「もし〇〇のとき、かつ□□のとき」のように、caseの中にさらに条件を加えたいときに使います。
where句を使うことで、値のパターンと論理的な条件の両方をチェックできます。まるで、条件を絞り込むフィルターのような働きをします。
3. where句を使った基本のswitch文
たとえば、ある年齢によって学生か社会人かを判定したいとします。ただし、20歳未満でも未成年は特別に扱いたいという場合、次のように書きます。
let age = 17
switch age {
case let x where x < 13:
print("子供です")
case let x where x < 20:
print("未成年の学生です")
case 20...64:
print("社会人です")
default:
print("高齢者です")
}
未成年の学生です
このようにlet x where x < 20と書くことで、「xという変数に代入して、それが20未満かどうか」を条件にしています。
4. where句とタプルの組み合わせで柔軟な条件
Swiftでは、複数の値をまとめて扱えるタプル(例:(名前, 年齢))とwhere句を組み合わせることで、より柔軟な条件分岐が可能になります。
let person = ("たろう", 25)
switch person {
case let (name, age) where age < 18:
print("\(name)さんは未成年です")
case let (name, age) where age < 65:
print("\(name)さんは成人です")
default:
print("高齢者です")
}
たろうさんは成人です
このようにwhere句でタプルの中の値に条件をかけることで、複数の値に基づいた分岐ができます。
5. where句と複雑な条件の応用例
さらに応用として、2つの整数の関係性によって処理を変えたいときも、where句はとても便利です。
let pair = (3, 9)
switch pair {
case let (a, b) where a == b:
print("同じ値です")
case let (a, b) where a < b:
print("左の数が小さいです")
case let (a, b) where a > b:
print("右の数が小さいです")
default:
print("不明なパターンです")
}
左の数が小さいです
このようにswitchとwhereの組み合わせは、複数の条件やパターンに応じた処理を簡潔に書くことができるという大きなメリットがあります。
6. if文との違いと使い分け
「それってif文でも書けるのでは?」と思った方もいるかもしれません。たしかに、条件による分岐はifでも可能です。
しかし、複数のパターンを整理して見やすくしたいときはswitchの方が適しています。特にwhere句を使えば、ただの一致だけでなく、条件付きの分岐が読みやすく書けます。
7. 実生活で例えるとどうなる?
where句は、たとえば「りんごだけど赤いもの」「バナナだけど長さが20cm以上のもの」のように、特定の種類+条件で分類したいときに使えます。
普通のswitch文は「種類」で分けますが、where句を使うと「種類+性質」で分けられるのです。
8. 簡単な練習問題:where句を試してみよう
以下のコードで、どの出力になるかを考えてみましょう。
let score = 88
switch score {
case let s where s >= 90:
print("とても良い成績です")
case let s where s >= 70:
print("合格です")
default:
print("もう少し頑張りましょう")
}
合格です
このように、点数によって細かく条件を分けるのにもwhere句が役立ちます。