if-case 文 【Swift実践入門読書メモ】

Swift実践入門を読んでみて、気になったところのメモです。

if-case 文

  • 第3章 2節 p.81

if-case を用いることで、以下のようなパターンマッチによる分岐が行えます。

if case 0...5 = 3 {
    print ("パターンにマッチしています")
}

比較対象が式の右辺にくるということと、 = が使われていることから、あまり直感的ではないのかなあという気がしました 。
そのため、上記のような Range を用いた式を書く場合には contains(:_)~= で事足りるということから if case を積極的に使う必要もなさそうかなと思いました。
ですが、Enum の場合には使い所がありそうなので、全体を統一するという目的で Range においても if case を使っていくのはありなのかなと思ったりしました。

Enum の場合には使い所がありそう

ですが、以下のように associated value が定義されている場合、 == を使った式で分岐させようとするとコンパイルエラーとなってしまいます。

enum Food {
    case hamburger(name: String)
}

let cheeseBurger = Food.hamburger(name: "cheese")

if cheeseBurger == .hamburger {
    print("ハンバーガー")
}
error: binary operator '==' cannot be applied to operands of type 'Food' and '_'
if cheeseBurger == .hamburger {
   ~~~~~~~~~~~~ ^  ~~~~~~~~~~

かと言って switch 文を使うと記述量も多くなってしまうので、こういう時には if-case を使うとシュッとかけて良さそうだなあと思いました。

if case .hamburger = cheeseBurger {
    print("ハンバーガー")
}

合わせて読みたい

  • パターンマッチ
    • 第3章 6節 pp.100-104