Оператор редукции (reduction operator) — это пара квадратных скобок, поставленных вокруг обычного оператора.
Разумеется, следует отличать оператор [ ] от обращения к элементу массива по индексу. Рассмотрим несколько полезных примеров, которые значительно улучшают читаемость кода и делают его компактным.
Оператор редукции всегда действует так, что следующие две строки кода эквивалентны:
[op] @array; @array[0] op @array[1] op @array[2] op ... op @array[$N];
Вместо оператора op может стоять любой инфиксный оператор, как встроенный, так и определенный пользователем.
Арифметика
Задача 1: найти сумму всех элементов массива.
my @a = 1..100; say [+] @a; # 5050
Задача 2: вычислить факториал.
say [*] 1..7; # 5040
Строки
Задача 3. Составить строку из частей.
my @s = < HE LL OWO RL D >; say [~] @s; # HELLOWORLD
Сравнение
Задача 4. Определить, отсортирован ли массив по возрастанию.
my @n = (10, 20, 30, 40); say [<] @n; # True
* * *
Если у вас есть интересный пример, где оператор редукции был бы полезен, поделитесь им в комментариях.
2 thoughts on “36. Оператор редукции в Perl 6”