きっかけ
僕がscalaを書くたびにコピペしてるutilツールの一つにtap関数があります。
ScalaでRubyのObject#tapがぽぽぽぽ〜ん。っていうかいつでもmapしたい - ( ꒪⌓꒪) ゆるよろ日記
たぶんもう10回以上コピペしていて、いい加減ライブラリ化したいと思っていたところ次のツイートが流れてきました。
https://t.co/uc5KXSOgeI
— Kenji Yoshida (@xuwei_k) 2018年8月9日
Scalaにtap入った
2.13でtap関数が標準ライブラリで正式採用、めでたい!
でも僕明日からでもこの標準のシグネチャで使いたいんだよなあ。
しかも2.13はRC1の締め切りが2018/9月末になってる。うーん。
というわけで、scala 2.12用に2.13で導入されるtap/pipeと全く同じものをライブラリで用意しました。
いわゆるバックポートというやつです。
使い方
build.sbtに以下を追加
libraryDependencies += "com.github.bigwheel" %% "tapandpipe" % "1.0"
tap/pipeを使いたいところで以下をimport
import com.github.bigwheel.util.chaining._
tap/pipeを使う
object Main {
def main(args: Array[String]): Unit = {
val a = 1
a.tap(println)
println(a.pipe(_ + 1))
}
}
蛇足
5年以上なんとかしたいと思っていた問題がやっと片付きました。標準準拠の実装として2.12でも使えるようになりましたしすっきりです。