المسارات
/
Elixir
Elixir
/
المنهج
/
عامل الأنابيب
عا

عامل الأنابيب في Elixir

10 تمارين

نبذة عن عامل الأنابيب

يُسمّى العامل |> عامل الأنبوب. ويمكن استخدامه لربط استدعاءات الدوال ببعضها بحيث تُمرَّر القيمة التي أرجعتْها الدالة السابقة كأول وسيط إلى استدعاء الدالة التالي.

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("")
    
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم عامل الأنابيب

التدريب مقفل

افتح 5 تمارين إضافية لممارسة عامل الأنابيب