Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Функційне програмування / Конвеєри даних
Ланцюжки конвеєрів
Справжня цінність потоків з’являється тоді, коли етапів кілька. Кожен
==> передає свій результат наступній операції, тож увесь
конвеєр читається згори вниз у тому порядку, у якому відбувається
робота:
(1..10)
==> grep(* %% 2)
==> map(* ** 2)
==> my @result;
say @result; # [4 16 36 64 100]Простежте дані вниз сторінкою: почни з 1..10, залиш
парні числа, піднеси кожне до квадрата й збери результат. Парні числа —
це 2, 4, 6, 8, 10, а їхні квадрати —
4, 16, 36, 64, 100.
Записаний як ланцюжок методів, той самий конвеєр має вигляд
(1..10).grep(* %% 2).map(* ** 2) — і читається він зліва
направо, точно як потік. Ланцюжок методів не вивернутий навиворіт; він
виконує свої етапи в тому самому порядку. Формою, що справді читається
навиворіт, є вкладання операцій як звичайних функцій —
map(* ** 2, grep(* %% 2, 1..10)), де доводиться починати з
найглибшого виклику й рухатися назовні.
Отже, потік — це не спосіб утекти від вивернутого коду, а інше
написання конвеєра, що читається зліва направо. Що він додає, так це
розкладку: кожен етап ==> може стояти на власному рядку,
і один оператор однаково працює як для кроків у стилі методів, так і для
кроків у стилі функцій, а це тримає довгий конвеєр легким для огляду.
Зрештою потоки та ланцюжки методів роблять ту саму роботу; обирайте те,
що робить конкретне перетворення найзрозумілішим.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Тест — Оператор конвеєра | Тест — Конвеєри →
💪 Або перейдіть одразу до вправ цього розділу.