皆さんご存知の通り、Scalaにはパターンマッチという機能があります。この機能、しばしば型に対するswitch-caseとして使われていることがあるようです。
たとえば、
sealed trait class Value case class Hoge(value: Int) extends Value case class Foo(value: String) extends Value case class Bar(value: List[String]) extends Value
というコードがあったとき、しばしば
value match { case hoge:Hoge => doHoge(hoge.value) case foo:Foo => doFoo(foo.value) case bar:Bar => doBar(bar.value) }
のような形で使われることがあります。このような使い方は場合によって必要なのですが、上記のようなコードでは全く不要です。以下のように機械的に書き換えてしまいましょう。
value match { case Hoge(value) => doHoge(value) case Foo(value) => doFoo(value) case Bar(value) => doBar(value) }
今回のようなケースではさほど差はあらわれませんが、より複雑なデータ構造をパターンマッチで分解するとき、型に対するswitch-caseを使うのとそうでないのとでは大きな差が出てきます。型に対するswitch-caseはあくまで必要悪です。使わずに済むならそれにこしたことはないということをよく覚えておいてください。
ではでは、また。