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