ただ日々を記すもの

意識高めを装うことができます

【Scala】matchについて学ぶ!

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個以上の任意の要素を表すみたい。
(↑はエラーが出た)

まとめ

他にもタプルとかコンストラクタでもマッチング出来るようです。
参考にしたのは、こちら