lessless

lessless

Hello,

In the Elixir codebase most wide-adopted pipe operator usage style is vertical piping:

variable
|> transform1(:another_option)
|> transform2

but horizontal piping is also present, though it’s rarer

variable |> transform1(:another_option) |> transform2

What are your thoughts about horizontal vs vertical piping? When use which? What’s your opinion about passing variable directly to the first function call vs piping it, i.e. transform1(variable, :another_option) vs variable |> transform1(:another_option)?

Showing Posts 1 to 3

belaustegui

belaustegui

I have nothing against horizontal piping as long at it doesn’t generate too long lines (my limit is about 80 characters).
If the line gets too long I would break it to use vertical piping.

I have stronger opinions about directly passing the variable to the first function call though. Consider the following example:

transform1(variable, :option)
|> transform2(:another_option)

The variable that gets passed to transform1() is the beginning of the piping, but I have to read the code carefully to notice that. The thing gets aggravated when using horizontal piping or functions with long names and multiple arguments.

transform1(variable, :option) |> transform2(:another_option)

On the other side, piping the variable to the first function call makes it explicit and I can recognise the actual data flow and transformations while quickly scanning the code.

variable
|> transform1(:option)
|> transform2(:another_option)

#or

variable |> transform1(:option) |> transform2(:another_option)

EDIT: I’ve been taking a look at Credo’s style guide and found this:

It is preferred to start pipe chains with a “pure” value rather than a function call.

# preferred way - this is very readable due to the clear flow of data
username
|> String.strip
|> String.downcase

# also okay - but often slightly less readable
String.strip(username)
|> String.downcase
NobbZ

NobbZ

I think this is much of a personal style or habbit.

I do prefer vertical pipes, but I do use horizontals in single-line assignments if there are not more than 2 pipe operators.

The main reason for prefering vertical pipes is, that you can spot them on a glance even when you are not in a highlighting editor, just because the aligned pipe operators set a very bold statement.

Qqwy

Qqwy

TypeCheck Core Team

The only uses for horizontal piping are either very trivial (i.e. short) sequences, or in IEx, as it will end a statement as soon as you hit return, even if you actually wanted to place a |> on the next line.

In most code, I (and I believe most of the other people in the community) agree that it is better to use vertical pipes, because they remain readable even when the amount of nested statements increases at a later time.

— All posts loaded —

Where Next? Top

Trending in Discussions Top

AstonJ
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
2977 92995 915
New
caslu
I want to open this thread for you all to discuss and help those who really like Ash but are still hesitant to use it in a real project. ...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
GES233
I’m posting this in response to Jose’s recent tweet (Cr. link) : People are sleeping on Elixir for a coding harness: Hot-code swappi...
New
marciol
It would be helpful to have a list of companies worldwide that hire engineers without prior experience in Elixir. Often, it can be quite ...
New
durvia
Anyone running long-lived stateful processes on BEAM? We’re building an AI agent runtime and would love to compare notes. We’re a small ...
New
nseaSeb
I’ve just put together a small POC exploring PDF inspection from Elixir/Phoenix: The idea is pretty simple: drag & drop a PDF in a...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews