Scala
パターンマッチ
備忘録
sealed

Scalaのシールドクラス/トレイトとパターンマッチ

More than 1 year has passed since last update.


シールドクラス/トレイトとは

先頭にsealed キーワードをつける。

同一ファイル内からのみ継承可能なクラス/トレイとのこと。

sealedクラス = 封印されたクラス

例:

sealed trait Example {

def one: Number
def two: Number
}

sealed abstract class Example


パターンマッチでの使い所


すべてのケースを網羅していることを保証したい

デフォルトケース云々の話ではなくて、とにかくすべてのケースの網羅を保証をして、

安心して寝たい場合。


baseball.scala

sealed trait Team

case class Dragons(member: String) extends Team
case class Tigers(member: String) extends Team
case class GoldenEagles(member: String) extends Team

object Main extends App {
def showProfile(t: Team): String = t match {
case Dragons(m) => s"中日 $m"
case Tigers(m) => s"阪神 $m"
}

val member = Dragons("山本昌")

println(showProfile(member))
}


sealedキーワードを付けることでコンパイラが以下のような警告をしてくれる。

baseball.scala:8: warning: match may not be exhaustive.

It would fail on the following input: GoldenEagles(_)
def showProfile(t: Team): String = t match {
^
one warning found