LoginSignup
15
5

More than 5 years have passed since last update.

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

Posted at

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

先頭に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
15
5
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
15
5