Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Тест — Потоци   |   Тест — Обратният поток


💪 Или преминете направо към упражненията в този раздел.