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

Operator Pipa

Operator pipa |> meneruskan hasil suatu ekspresi sebagai parameter pertama dari ekspresi lain.

Perkenalan

Pemrograman bisa menjadi rumit. Bahkan sangat rumit sehingga panggilan fungsi bisa menjadi sangat saling terkait sehingga sulit untuk dipahami. Perhatikan fungsi berlapis berikut ini:

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

Di sini, kita meneruskan nilai dari other_function/0 ke new_function/1, dan new_function/1 ke baz/1, baz/1 ke bar/1, dan akhirnya hasil dari bar/1 ke foo/1. Elixir mengambil pendekatan pragmatis terhadap kekacauan sintaksis ini dengan memberi kita operator pipa. Operator pipa yang terlihat seperti |> mengambil hasil dari satu ekspresi, dan meneruskannya. Mari kita lihat lagi cuplikan kode di atas yang ditulis ulang menggunakan operator pipa.

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

Pipa tersebut mengambil hasil dari sisi kiri, dan meneruskannya ke sisi kanan.

Contoh

Untuk rangkaian contoh ini, kita akan menggunakan modul String dari Elixir.

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

Praktik Terbaik

Jika aritas suatu fungsi lebih dari 1, pastikan untuk menggunakan tanda kurung. Hal ini tidak terlalu penting bagi Elixir, tetapi penting bagi programmer lain yang mungkin salah menafsirkan kode Anda. Namun, hal ini penting untuk operator pipa. Misalnya, jika kita mengambil contoh ketiga kita, dan menghapus tanda kurung dari String.ends_with?/2, kita akan mendapatkan peringatan berikut.

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
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!