読者です 読者をやめる 読者になる 読者になる

Scalaのforeachはパターンマッチで書けるのね

val hoge = List(1, 3, 5, 7)

こんなリストがあるとして

順番に要素を出力してみよう。

👻例1

foreachを使うと

hoge.foreach(h => {
  println(h)
})

こうなる。

👻例2

これをパターンマッチと再帰的なサムシンでも書けるっぽい。

@tailrec
def f(hoge: List[Int]): List[Int] = {
  hoge match {
    case h :: fuga =>
      println(h)
      f(fuga)
    case _ =>
      List.empty[Int]
  }
}

f(hoge)を呼び出せば例1と同じになる。

何故急にこんなことを書いてみたかというと、
例2にあるcase h :: fuga => の意味が分かった記念。
最初::が要素追加かと思って何をしているのか理解できんかったけど、リストを順番に処理しているのね。

ちなみにここでの再帰処理を図におこすとこんな感じだと思う!
f:id:ihcomega:20160727210926p:plain

Scalaのパターンマッチはとにかく強いらしい…?