Треки
/
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 вправ, щоб практикувати концепцію Оператор конвеєра