Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Тест — Потоци | Тест — Обратният поток →
💪 Или преминете направо към упражненията в този
раздел.