Давайте теперь рассмотрим некоторые приправы к замыканиям. Мы начнем с механизма, с помощью которого можно выразить замыкания, реализующие шаблон вычислений - понятие из области функционального программирования. Примером шаблона вычислений может служить ситуация, в которой вам необходимо преобразовать каждый элемент List
одинаковым образом. Поскольку такие шаблоны встречаются очень часто, мы разработали класс, названный Functor
, который будет инкапсулировать их как static Closure
. В листинге 6 показаны фрагменты кода.
Листинг 6. Функциональный элемент, инкапсулирующий шаблон вычислений
package fp |
Здесь вы можете увидеть замыкание под названием map
, которое не следует путать с интерфейсом Map
. У замыкания map
есть параметр f
, который представляет замыкание, и параметр list
, который представляет, как ни удивительно, List
. Он возвращает новый List
, в котором f
накладывается на каждый элемент list
. Конечно же, в Groovy уже есть метод collect()
для Lists
, поэтому мы будем использовать его в нашей программе.
В листинге 7 мы пойдем еще дальше, применив карринг к замыканию map
, что даст нам блок, который будет умножать все элементы заданного списка на 12.
Листинг 7. Добавим немного карри и умножим на 12
import fp.* |
Это именно то, что мы называем пятизвездочными вычислениями!