Scala を使っていて感じた変なところを書きます。
人によっては、どうでも良いというレベルのポエム記事です。
- メソッド内の匿名関数からダイレクト return 出来てしまう
初期の Scala から fork されたという Kotlin でも同じことが出来ますが、
メソッド内で collection の foreach なんかに関数を渡すとします。
その際に、 関数の中で return が書かれていると、ダイレクトに foreach を呼び出しているメソッドから抜けてしまいます。
scala
val data = Map("a" -> Seq(1,2,3), "b" -> Seq(4,5,6), "c" -> Seq(), "d" -> Seq(7,8,9))
def conv(data: Map[String, Seq[Int]]): Boolean = {
data.foreach(kv => {
val key = kv._1
val value = kv._2
if (value.isEmpty) {
println(s"${key} is empty")
return false // ここで親のconvメソッドの戻り値が返せてしまう
}
value.map(v => {
s"${key} - ${v}"
})
.foreach(println)
})
true
}
println(conv(data))
結果、こんな感じになります
a - 1
a - 2
a - 3
b - 4
b - 5
b - 6
c is empty
false
foreach に返されるんじゃないんかい!というところが変だと思うわけです。