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

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

Тест — Операторът за поток   |   Тест — Потоци


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