|> অপারেটরটিকে পাইপ অপারেটর বলা হয়। এটি দিয়ে একাধিক ফাংশন কল এভাবে একসাথে জুড়ে দেওয়া যায়, যাতে আগের ফাংশন কল থেকে রিটার্ন করা মান পরের ফাংশন কলের প্রথম আর্গুমেন্ট হিসেবে পাঠানো হয়।
String.replace_suffix(String.upcase(String.duplicate("go ", 3)), " ", "!")
# versus
"go "
|> String.duplicate(3)
|> String.upcase()
|> String.replace_suffix(" ", "!")
একটি একক লাইনেও এটি ব্যবহার করা যায়:
"go " |> String.duplicate(3) |> String.upcase() |> String.replace_suffix(" ", "!")
Kernel-এর ফাংশনগুলো সাধারণত সব জায়গায় Kernel মডিউলের নাম ছাড়াই ব্যবহার করা হয়, কিন্তু পাইপ চেইনে সেই ফাংশনগুলো ব্যবহার করার সময় মডিউলের নামটি লাগে। উদাহরণস্বরূপ, 2 * 3 == 6-কে এভাবেও লেখা যায়:
2 |> Kernel.*(3) |> Kernel.==(6)
কখন পাইপ অপারেটর ব্যবহার করবেন আর কখন করবেন না, সেটি একান্তই ব্যক্তিগত পছন্দের ব্যাপার। কিছু Elixir ডেভেলপার এই নিয়মগুলো মেনে চলতে পছন্দ করেন:
একটি মাত্র ফাংশন কল করার সময় পাইপ অপারেটর ব্যবহার করবেন না।
# do
String.split("hello", "")
# don't
"hello" |> String.split("")
পাইপ চেইনের ভেতরে সরাসরি নামবিহীন ফাংশন তৈরি করবেন না।
# 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).()
পাইপ চেইন সবসময় একটি ভ্যারিয়েবল বা লিটারেল মান দিয়ে শুরু করুন, কোনো ফাংশন কল দিয়ে নয়।
# do
"hello" |> String.upcase() |> String.split("")
# don't
String.upcase("hello") |> String.split("")