Как стать автором
Обновить

Скармливающие операторы в Perl 6

Время на прочтение1 мин
Количество просмотров5.4K
Автор оригинала: perlpilot
Программисты Perl 5 сталкивались с такой структурой в коде:

    my @new = sort { ... } map { ... } grep { ... } @original;


Здесь данные идут справа налево, от массива @original, который скармливают в grep, который, в свою очередь, скармливает данные в map, а тот в sort, и в конце всё это присваивается массиву @new. Каждый из них принимает список в качестве аргумента.

В Perl 6 потоки данных передаются непосредственно через скармливающий оператор. Представленный пример можно записать в таком виде в Perl 6:

    my @new <== sort { ... } <== map { ... } <== grep { ... } <== @original;


Принцип TMTOWTDI никуда не делся. Это же можно записать почти так же, как это было в Perl 5:

    my @new = sort { ... }, map { ... }, grep { ... }, @original;


Разница только в запятых.

Что же даёт нам этот оператор? Читая код, вы делаете это слева направо. В коде Perl 5 вы можете прочитать пример слева направо, а потом окажется, что работает он справа налево. В Perl 6 появился синтаксический маркер, который наглядно показывает направление потока данных.

Чтобы улучшить читаемость кода и повернуть поток данных в нужном направлении, слева направо, существует специальный скармливающий оператор:

    @original ==> grep { ... } ==> map { ... } ==> sort { ... }  ==> my @new;


Работает это точно так же, как и предыдущий вариант, просто данные идут слева направо. Вот ещё примеры реального применения этого оператора в коде:

    my @random-nums = (1..100).pick(*);
    my @odds-squared <== sort() <== map { $_ ** 2 } <== grep { $_ % 2 } <== @random-nums;
    say ~@odds-squared;

    my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
    @rakudo-people ==> grep { /at/ } ==> map { .ucfirst } ==> my @who-it's-at;
    say ~@who-it's-at;
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 18: ↑14 и ↓4+10
Комментарии6

Публикации

Истории

Ближайшие события