戻る

Kotlinの関数参照に出会ってしまった

Let's plot for Kotlinでコードを眺めていると、見慣れないコードに出会いました(Categorical Data Type)。

val mpg = DataFrame.readCSV("https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/mpg.csv")
val mpgData = mpg.toMap()
val brandsByCount = mpg.valueCounts { manufacturer }.manufacturer.toList()
brandsByCount.forEach(::println)

これはCSVをデータフレームに格納して、マップへ変換し、さらに各値をリストにしています。 最終的にはbrandsByCountブランドのリストが入ります。

問題は

brandsByCount.forEach(::println)

の部分です。

通常はラムダ式で

brandsByCount.forEach { it -> println(it) }

もしくは、itは暗黙な引数なので

brandsByCount.forEach { println(it) }

とも書くことが多いと思います。

シンプルさのためにこのような書き方をしているのかもしれませんが、調べてみると高階関数に関係があるようです。 e.g., Kotlin Function References: Complete Professional Guide

私はまだまだKotlinについて体系的に説明できないので、今一度基礎に戻って勉強しようかなと思います。 最近Kotlin in Action 2nd Editionを購入したので、そこにも書いてあるかもしれませんね。 期待しながら到着を待つことにしましょう。

どうでもいい愚痴ですが、このKotlin in Actionの第2版はまだ日本語版が出版されていないみたいです。ゆっくり読んでいきますか。。。

戻る