Scalaでもパイプラインできるもん!
Elixirのパイプライン演算子が羨ましくなったので作ってみました。
と言っても、こいつ↓でオブジェクトにパイプライン演算子を生やすだけです。
implicit class Pipe[A](value: A) { def |>[B](f: A => B): B = f(value) }
こんな感じでかけます。
List(List(1,2,3),List(4),List(5)) |> (_.flatten) |> (_.map(Math.pow(_, 2))) // => List(1, 4, 9, 16, 25)
見易く演算子の前で改行を入れる場合はそのままだとエラーになるので、ちょっとカッコ悪いですが.
を入れましょう。
List(List(1,2,3),List(4),List(5)) .|> (_.flatten) .|> (_.map(Math.pow(_, 2))) // => List(1, 4, 9, 16, 25)
メソッドチェーンとは違い(メソッドだけでなく)関数のチェーンを型注釈なしで書けるので、割と使い勝手が良さそう。 値クラスに出来ればもっと良いのだけれど。