Tracks
/
Elixir
Elixir
/
Syllabus
/
Pipe Operator
Pi

Pipe Operator in Elixir

9 exercises

About Pipe Operator

The |> operator is called the pipe operator. It can be used to chain function calls together in such a way that the value returned by the previous function call is passed as the first argument to the next function call.

String.replace_suffix(String.upcase(String.duplicate("go ", 3)), " ", "!")

# versus

"go "
|> String.duplicate(3)
|> String.upcase()
|> String.replace_suffix(" ", "!")

It can also be used on a single line:

"go " |> String.duplicate(3) |> String.upcase() |> String.replace_suffix(" ", "!")

Kernel functions are usually used everywhere without the Kernel module name, but the module name is needed when using those functions in a pipe chain. For example, 2 * 3 == 6 can also be written as:

2 |> Kernel.*(3) |> Kernel.==(6)

It is a matter of personal preference when to use the pipe operator and when not. Some Elixir developers like to follow those rules:

  • Do not use the pipe operator when doing a single function call.

    # do
    String.split("hello", "")
    
    # don't
    "hello" |> String.split("")
    
  • Do not create anonymous functions directly in the pipe chain.

    # do
    take_n_letters = fn n -> Enum.take(?a..?z, n) end
    2 |> Kernel.*(3) |> take_n_letters.()
    
    # don't
    2 |> Kernel.*(3) |> (fn n -> Enum.take(?a..?z, n) end).()
    
  • Always start a pipe chain with a variable or literal value, not a function call.

    # do
    "hello" |> String.upcase() |> String.split("")
    
    # don't
    String.upcase("hello") |> String.split("")
    
Edit via GitHub The link opens in a new window or tab

Learn Pipe Operator

Practicing is locked

Unlock 5 more exercises to practice Pipe Operator