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