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