Scalaのケースクラス・パターンマッチング・エラー処理(Option, Either, Try)・Implicit(暗黙の型変換・パラメータ)の使い方を徹底解説!サンプルコード付きで詳しく解説します。

Scalaの基本を学ぶ【その1】〜制御構文・クラス・オブジェクト・関数〜

Scalaの基本を学ぶ【その2】〜コレクション・リスト・マップ・セットの使い方〜

動作環境

Scala:2.12

ケースクラスとパターンマッチング

簡単なケースクラスによるデータ型の定義

sealed abstract class DayOfWeek
case object Sunday extends DayOfWeek
case object Monday extends DayOfWeek
case object Tuesday extends DayOfWeek
case object Wednesday extends DayOfWeek
case object Thursday extends DayOfWeek
case object Friday extends DayOfWeek
case object Saturday extends DayOfWeek

CやJavaとの列挙型との違いは、

パターンマッチングを用いて定義することで、

  1. ノードの種類と構造によって分岐する
  2. ネストしたノードを分解する
  3. ネストしたノードを分解した結果を変数に束縛する

という3つの動作が同時に行える。

ある日の次の曜日を返すメソッドnextDayOfWeekをパターンマッチを用いて定義している例:

def nextDayOfWeek(d: DayOfWeek): DayOfWeek = d match {
    case Sunday => Monday
    case Monday => Tuesday
    case Tuesday => Wednesday
    case Wednesday => Thursday
    case Thursday => Friday
    case Friday => Saturday
    case Saturday => Sunday
}

実行例:

scala> nextDayOfWeek(Sunday)
res0: DayOfWeek = Monday