match関数
Javaでいうところのifやswitchの役割。
簡単なサンプルを見てみましょう。
簡単な使い方
object Main { def main(args: Array[String]):Unit = { val line = readInt() val evaluation = line match { case 1 => "E" case 2 => "D" case 3 => "C" case 4 => "B" case 5 => "A" case _ => "None" } println(evaluation) } }
これは、入力された数字に対して対応するアルファベットを出力しています。よくあるやつですね
これなんか、まんまswitchで書き換えられますね。
あ、ちなみに_
はワイルドカード。
Javaでいうdefault
みたいなやつ。
型パターン
これはswitchではできないもの。
object Main { def main(args: Array[String]): Unit = { val list = List(1, true, "str") for (value <- list) { value match { case num: Integer => println("num=" + num) case bool: Boolean => println("bool=" + bool) case name: String => println("name=" + name) case _ => println("value=" + value) } } } }
なんかすごい!!使うのかわかんないけどすごい気がする!!
シーケンスマッチング
シーケンスはListみたいなもの。
object PatternMatchSeq { def main(args: Array[String]): Unit = { val seq = Seq("Hello", "GM", "GE", "GN") val result = seq match { case Seq(a, b, _ ,_) => a case _ => "" } println("Greeting:" + result) } }
これを実行すると、
Hello
この場合要素が2個以上のSeq
にマッチ。
_*
は、0個以上の任意の要素を表すみたい。
(↑はエラーが出た)
まとめ
他にもタプルとかコンストラクタでもマッチング出来るようです。
参考にしたのは、こちら