シールドクラス/トレイトとは
先頭に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