Project

General

Profile

Actions

Feature #20770

open

A *new* pipe operator proposal

Added by AlexandreMagro (Alexandre Magro) about 2 months ago. Updated 4 days ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:119335]

Description

Hello,

This is my first contribution here. I have seen previous discussions around introducing a pipe operator, but it seems the community didn't reach a consensus. I would like to revisit this idea with a simpler approach, more of a syntactic sugar that aligns with how other languages implement the pipe operator, but without making significant changes to Ruby's syntax.

Currently, we often write code like this:

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

We can achieve the same result using the then method:

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

While then helps with readability, we can simplify it further using the proposed pipe operator:

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

Moreover, with the upcoming it feature in Ruby 3.4 (#18980), the code could look even cleaner:

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

This proposal uses the anonymous block argument (_1), and with it, it simplifies the code without introducing complex syntax changes. It would allow us to achieve the same results as in other languages that support pipe operators, but in a way that feels natural to Ruby, using existing constructs like then underneath.

I believe this operator would enhance code readability and maintainability, especially in cases where multiple operations are chained together.

Thank you for considering this proposal!

Actions

Also available in: Atom PDF

Like6
Like0Like0Like0Like0Like0Like0Like0Like1Like0Like1Like0Like1Like0Like0Like0Like1Like1Like0Like0Like0Like1Like1Like0Like1Like1Like0Like0Like1Like0Like0Like1Like0Like1Like1Like0Like0Like0Like0Like0Like1Like1Like0Like0Like0Like0Like0Like0Like1