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