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 に返されるんじゃないんかい!というところが変だと思うわけです。
