LoginSignup
14
15

More than 5 years have passed since last update.

Scalaのパターンマッチングを使った代入がすごい

Last updated at Posted at 2013-08-07

Scala使いなら誰もがパターンマッチを使っていると思います


num match {
  case i: Int    => println("Int型だよ")
  case l: Long   => println("Long型だよ")
  case d: Double => println("Double型だよ")
}

opt match {
  case Some(x) => println(x)
  case None    => println("Noneだよ")
}

型ごとに分岐できたり
メンバの値を束縛することもできます。

実はパターンマッチは代入にも使えます
まずはパターンマッチに使うcase classを用意しましょう

case class Person(name: String, age: Int)

case classではunapplyメソッドが実装され

case Person(name, age) => println("名前: " + name + ", 年齢: " + age)

みたいにnameとageに値を束縛できます

これを変数代入でも出来ちゃうんです

val p: Person = Person("taro yamada", 25)
val Person(name, age) = p
println(name) // => taro yamada
println(age) // => 25

わざわざ
val name = p.name
val age = p.age
みたいに書かなくても一行で済みます

ただこれは結構知ってる人が多いんじゃないかと思うので
もう一つのパターンマッチのやり方も書きます

case class +(_1: Int, _2: Int)

何これと思う人がいると思うんですけど
実はこれ+が名前のcase classです

val a = new +(1, 2)

みたいなかんじで使えます
これをパターンマッチでどういう風に使うかというと

val b + c = a
println(b) // => 1
println(c) // => 2

b + cみたいに演算子を使うかのような感覚で代入できます
パターンマッチ超便利

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15