Do you want to pick up from where you left of?
Take me there

Pipeoperatoren

Pipeoperatoren |> fører resultatet av et utrykk som første parameter til et nytt utrykk.

Introduksjon

Programmering kan bli rotete. Funksjoner som kaller på andre funksjoner kan bli så integrerte at de blir vanskelig å følge. Ta en titt på dette eksemplet av nestede funksjoner:

foo(bar(baz(new_function(other_function()))))

Her fører vi verdien other_function/0 til new_function/1, og new_function/1 til baz/1, og baz/1 til bar/1, og til slutt resultatet av bar/1 til foo/1. Elixir har en pragmatisk løsning på dette syntaktiske rotet - pipeoperatoren. Pipeoperatoren |> tar resultatet av et utrykk og fører det videre. La oss ta eksemplet over, og skrive det om ved hjelp av pipeoperatoren:

other_function() |> new_function() |> baz() |> bar() |> foo()

Pipeoperatoren tar resultatet på venstre side, og fører det over som første argument på høyre side.

Eksempler

Disse eksemplene benytter seg av Elixirs innebygde Strengemodul.

iex> "Elixir rocks" |> String.split()
["Elixir", "rocks"]
iex> "Elixir rocks" |> String.upcase() |> String.split()
["ELIXIR", "ROCKS"]
iex> "elixir" |> String.ends_with?("ixir")
true

Beste Praksis

Hvis nummeret av argumenter til en funksjon(aritet) er mer enn 1, må vi benytte oss av paranteser. Dette er ikke så viktig for Elixir, men det er viktig for andre utviklere som kan misforstå kodene du har skrevet. Hvis vi tar det tredje eksemplet over, og fjerner parantesene fra String.ends_with?/2 gir Elixir oss en advarsel:

iex> "elixir" |> String.ends_with? "ixir"
warning: parentheses are required when piping into a function call. For example:

  foo 1 |> bar 2 |> baz 3

is ambiguous and should be written as

  foo(1) |> bar(2) |> baz(3)

true
Har du oppdaget en feil eller ønsker å bidra til leksjonen? Rediger denne leksjonen på GitHub!