Курс 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 тест за змістом цієї теми.

Навігація курсом

Тест — Конвеєри   |   Тест — Зворотний конвеєр


💪 Або перейдіть одразу до вправ цього розділу.