match式

Scalaの「match式」は、与えられた値に対して複数のパターンを照合して分岐処理を行う構文であり、関数型プログラミングにおけるパターンマッチングの代表的な機能です。Javaのswitch文に似ていますが、より強力で柔軟なマッチング機能を提供します。


基本構文

scala
value match { case パターン1 => 処理1 case パターン2 => 処理2 ... case _ => デフォルト処理 }
  • value: マッチ対象の値。

  • caseごとに異なるパターンを記述し、それに応じた処理を行います。

  • case _はワイルドカードで、どのパターンにもマッチしない場合のデフォルトケースとして使われます。


例1: 整数の分類

scala
val number = 2 val result = number match { case 1 => "one" case 2 => "two" case 3 => "three" case _ => "other" } println(result) // 出力: two

例2: 型によるマッチング

scala
def describe(x: Any): String = x match { case i: Int => s"Int型: $i" case s: String => s"文字列: $s" case _ => "未知の型" }

例3: タプルのマッチング

scala
val pair = (1, "apple") pair match { case (1, fruit) => println(s"1と$fruit") case (_, "banana") => println("バナナが含まれている") case _ => println("その他") }

例4: ケースクラスとの連携

Scalaのcase classmatch式は非常に相性がよく、クラスの内部構造に応じた分岐処理が簡潔に書けます。

scala
sealed trait Animal case class Dog(name: String) extends Animal case class Cat(name: String) extends Animal def speak(animal: Animal): String = animal match { case Dog(name) => s"$nameがワンと鳴く" case Cat(name) => s"$nameがニャーと鳴く" }

特徴と利点

  • 安全性: sealed traitと組み合わせることで、全てのケースを網羅しているかコンパイラがチェックできます。

  • 柔軟性: 値、型、構造(タプルやリストなど)、ガード条件(if句)による細かい制御が可能です。

  • 関数型との親和性: match式自体が式であり、結果を値として返すことができます。


ガード条件の使用

scala
val n = 5 val result = n match { case x if x % 2 == 0 => "偶数" case _ => "奇数" }

まとめ

Scalaのmatch式は、単なる条件分岐にとどまらず、型・構造・条件を使った強力で型安全な分岐処理機構です。特に、ケースクラスやパターンマッチングと組み合わせることで、複雑なデータ構造の処理が非常に読みやすく、簡潔に書けるのが大きな利点です。

生成日:2025/05/04