🐡

【bugs.ruby Advent Calender】パイプライン演算子を追加する提案【25日目】

2024/12/25に公開

bugs.ruby Advent Calender 25日目の記事です。

これはなに

今年1年間通してみてきた bugs.ruby のチケットの中から気になったものを1つずつ取り上げていく Advent Calender です。
取り上げるチケットは基本的にこのブログで取り上げたものになります。
記事のまとめは ここを参照 してください。

[Feature #20770] A new pipe operator proposal

みんな大好きパイプライン演算子を追加する提案です。
例えば以下のようにメソッドをネストして呼び出すようなコードを

value = half(square(add(value, 3)))

次のように |> 演算子で左から右に向かって書くことができるようにする提案です。

value = add(value, 3) |> square(_1) |> half(_1)

これは #then を使って以下のようにもかけますがこれを簡略的に書きたい、みたいな意図でもあります。

value = value.then { add(_1, 3) }.then { square(_1) }.then { half(_1) }

対応の是非は置いといて、今年みたチケットでもかなり盛り上がっていたほうだと思います。

個人的にはチケット内であった obj.then {}obj.{} のようにかけるようにする提案が好き。

client_api_url
  .then { URI.parse(it) }
  .then { Net::HTTP.get(it) }
  .then { JSON.parse(it).fetch(important_key) }

が以下のようにかける。

client_api_url
  .{ URI.parse(it) }
  .{ Net::HTTP.get(it) }
  .{ JSON.parse(it).fetch(important_key) }

関連

GitHubで編集を提案

Discussion