See the Elephant

1992生まれのプログラマが書くエンジニアブログ

scalaのforはflatMapやmap相当らしい

blog.shibayu36.org

val map = Map("a" -> 1, "b" -> 2)

map.get("a").flatMap(a =>
  map.get("b").map(b => {
    a + b
  })
)
map.get("a").flatMap(a =>
  map.get("c").map(c => {
    a + c
  })
)
map.get("c").flatMap(c =>
  map.get("b").map(b => {
    b + c
  })
)

上記のコードは以下のコードと等価らしい。

val map = Map("a" -> 1, "b" -> 2)

for {
  a <- map.get("a")
  b <- map.get("b")
} yield a + b

for {
  a <- map.get("a")
  c <- map.get("c")
} yield a + c

for {
  c <- map.get("c")
  b <- map.get("b")
} yield c + b

上の例では、一番最初だけ Some(3) を返しあとは None を返す。

これは便利だなぁ