Percursos
/
Elixir
Elixir
/
Programa
/
Operador pipe
Op

Operador pipe em Elixir

10 exercícios

Sobre Operador pipe

O operador |> chama-se operador pipe. Podes usá-lo para encadear chamadas de funções, de forma que o valor devolvido pela chamada de função anterior seja passado como primeiro argumento à chamada de função seguinte.

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

# versus

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

Também o podes usar numa única linha:

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

Normalmente usam-se as funções de Kernel em qualquer lado sem o nome do módulo Kernel, mas o nome do módulo é necessário quando se usam essas funções numa cadeia de pipes. Por exemplo, 2 * 3 == 6 também pode ser escrito como:

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

Usar ou não o operador pipe é uma questão de preferência pessoal. Alguns programadores de Elixir gostam de seguir estas regras:

  • Não uses o operador pipe quando fazes apenas uma chamada de função.

    # do
    String.split("hello", "")
    
    # don't
    "hello" |> String.split("")
    
  • Não cries funções anónimas diretamente na cadeia de pipes.

    # 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).()
    
  • Começa sempre uma cadeia de pipes com uma variável ou um valor literal, nunca com uma chamada de função.

    # do
    "hello" |> String.upcase() |> String.split("")
    
    # don't
    String.upcase("hello") |> String.split("")
    
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Operador pipe

A prática está bloqueada

Desbloqueia mais 5 exercícios para praticares Operador pipe