Fork me on GitHub

Operator pipe

Operator pipe|> melewatkan hasil expression di sebelah kirinya sebagai parameter pertama untuk expression di sebelah kanannya.

Daftar Isi

Perkenalan

Pembuatan program bisa sangat rumit. Begitu rumitnya sehingga pemanggilan fungsi bisa begitu berlapis sehingga sulit ditelusuri. Sebagai contoh fungsi berlapis berikut ini:

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

Di sini, kita meneruskan nilai dari other_function/1 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 pipe. Operator pipe yang tampak seperti |> mengambil hasil dari satu expression dan meneruskannya. Mari lihat lagi snippet di atas kalau ditulis dengan operator pipe.

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

Pipe mengambil hasil dari kiri, dan meneruskannya ke sebelah kanan.

Contoh

Pada sekumpulan contoh berikut, 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

Best Practice

Jika arity (jumlah parameter) dari sebuah fungsi adalah lebih dari 1, pastikan untuk menggunakan tanda kurung. Hal ini tidak berarti banyak untuk Elixir, tapi penting untuk programmer lain yang bisa salah memahami code anda. Jika kita lihat contoh ke-2, dan membuang tanda kurungnya dari Enum.map/2, kita mendapat peringatan sebagai berikut.

iex> "Elixir rocks" |> String.split |> Enum.map &String.upcase/1
iex: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parenthesis. For example:

foo 1 |> bar 2 |> baz 3

Should be written as:

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

["ELIXIR", "ROCKS"]

Bagikan Halaman Ini