Scalaでのmatch文のサンプルを紹介します。
基本的なパターン
値に応じて結果を分岐させる最も基本のパターンになります。
match基本パターン
def main(arts: Array[String]) : Unit = {
matchSample(1) // => =1
matchSample(2) // => =2
matchSample(3) // => =3
matchSample(10) // => それ以外
}
def matchSample(n: Int) : Unit = {
println(
n match {
case 1 => "=1"
case 2 => "=2"
case 3 => "=3"
case _ => "それ以外"
}
)
}
「case _ 」は、該当する値が無かった場合の分岐になります。
該当するケースが無く、「case _ 」の記述が無いと MatchError が発生しますので、必ず記述するようにしましょう。
オブジェクトの中身で分岐する
Scalaのmatch構文はオブジェクトの中身の状態によって分岐することも可能です。
match オブジェクトの状態で分岐する
def main(arts: Array[String]) : Unit = {
matchSample2(List(1, 2, 3)) // => List(1, 2, 3)
matchSample2(List(1, 2, 5)) // => 3要素のリスト
matchSample2(List(1, 2, 3, 4)) // => 4要素のリスト
}
def matchSample2(list: List[Int]) : Unit = {
println(
list match {
case List(1, 2, 3) => list
case List(a, b ,c) => "3要素のリスト"
case List(a, b ,c, d) => "4要素のリスト"
}
)
}
ifを使って複数条件で分岐する
以下のようにmatchとifを合わせることで、複雑な条件分岐を表現することも可能です。
matchとifで複数条件で分岐させる
def main(arts: Array[String]) : Unit = {
matchSample3(List(1, 2, 3)) // => 3要素のリスト(末尾5以外)
matchSample3(List(1, 2, 5)) // => 3要素のリスト(末尾5)
}
def matchSample3(list: List[Int]) : Unit = {
println(
list match {
case List(a, b ,c) if c != 5 => "3要素のリスト(末尾5以外)"
case List(a, b ,c) => "3要素のリスト(末尾5)"
case _ => "それ以外"
}
)
}