Привет,

В этой статье я расскажу о некоторых интересных и полезных возможностях языка программирования Groovy и приведу примеры его использования.

заводной

Groovy [1] — это динамический язык, работающий внутри виртуальной машины Java (JVM). Groovy очень похож на Java, но имеет много особенностей, которые дают разработчику отличные инструменты для решения повседневных задач программирования простым и элегантным способом.

Окружающая обстановка

Прежде всего, вам нужно установить Groovy. Вы можете загрузить его с http://www.groovy-lang.org/ или использовать менеджер пакетов. На моей машине я использую Groovy версии 2.4.5.

После установки и настройки откройте терминал и введите:

groovyConsole

Откроется консоль Groovy, где вы можете писать команды и просматривать результаты одну за другой. Теперь вы готовы приступить к изучению некоторых функций Groovy.

Описание

В этом примере объявляется список из строк, перебирается по нему и печатается текст приветствия в консоли. И это вводит новые синтаксисы Groovy.

Во-первых, Groovy — язык с опциональной типизацией, а это значит, что мы не обязаны объявлять тип для наших переменных. Вместо этого мы можем просто объявить переменные с помощью ключевого слова def, и тип будет автоматически определен во время выполнения на основе значения, принятого переменной.

Во-вторых, в Groovy есть встроенный синтаксис для объявления списков, listOfNames — это список, а не массив строк. Еще одним интересным моментом в этом примере является усовершенствованный цикл for, в котором мы не объявляем какой-либо тип для нашей переменной цикла.

В-третьих, Groovy представляет очень простой способ печати данных, функция println — это ярлык для печати в стандартном выводе системы и добавления новой строки в конце (в Java это будет System.out.println).

В-четвертых, печатаемый текст также имеет особое значение, он использует новую GString, которая представляет собой «развитую» String, что дает нам возможность вставлять отформатированные значения внутрь строки. Строка. В примере «Hello ${name}» ${name}решаетдля переменной цикла имя.

Диапазон, закрытие и каждый

В этом примере вычисляется сумма чисел от 1 до 5, включая конечные точки.

В приведенном выше коде представлены новые структуры языка программирования Groovy, которые позволяют нам писать код, вдохновленный парадигмой функционального программирования (FP).

Во-первых, запись диапазона, где (a..b) возвращает список чисел между a и b. Мы перебираем этот List по-другому, используя концепцию FP, называемую замыканием. Проще говоря, замыкание — это блок кода, который имеет доступ к окружающей области видимости. Здесь каждый — это метод, который принимает замыкание с одним аргументом, который представляет собой переменную цикла, полученную из диапазона, когда мы не объявляем имя переменной, Groovy вводит значение по умолчанию с именем it.

Я упомянул, что внутри замыкания у нас есть доступ к окружающей области видимости. В примере мы использовали этот ресурс, изменив переменную sum, объявленную вне области действия блока каждого.

Уменьшить и ввести

В FP у нас есть очень важная операция, называемая сокращением, которая определяется как функция, применяемая к набору значений, возвращающая только одно значение. Сумма, которую мы сделали выше, является примером редукции.

Мы начали с List, обработали его и вернули только одно репрезентативное значение, которое представляет собой сумму элементов List. Groovy имеет собственный синтаксис для выполнения редукции, который использует вставку, которая следует синтаксису

Отфильтровать и найтиВсе

В этом примере представлен один из моих любимых ресурсов Groovy: фильтр.

Как следует из названия, фильтр — это функция, применяемая к коллекциям, которая удаляет все записи в коллекции, которые не удовлетворяют переданному ей предикату.

В Groovy операция фильтрации представлена ​​методом findAll, который принимает предикат, который может быть построен замыканием. В примере мы построили замыкание, которое проверяет, является ли элемент четным числом, возвращая true в этом случае.

Класс, именованный параметр, карта, сбор и оператор точки

Groovy поддерживает объектно-ориентированное программирование (ООП). Для этого используются классы как структурные элементы для представления моделей. Тем не менее, у Groovy есть существенное отличие: он вводит средства доступа и мутаторы по умолчанию (геттеры и сеттеры) для каждого атрибута, что подразумевает, что атрибуты в некотором роде общедоступны по умолчанию.

Еще одно отличие от Java заключается в том, что Groovy имеет именованные параметры, что позволяет нам изменять порядок доступа к аргументам функции, передавая имя аргумента со значением, которое мы использовали в синтаксисе конструктора, указывая, какие атрибуты мы инициализируем. .

Как и для списков, Groovy имеет встроенный синтаксис def myMap = [key: value] для объявления и инициализации Map.

Наряду с сокращением другой важной операцией функционального программирования является карта. Карта — это просто ассоциация. Учитывая набор значений, операция карты возвращает другой набор значений, каждое возвращаемое значение которого является функцией исходного значения.

В Groovy мы делаем карту с помощью метода collect, который принимает замыкание для каждой записи и возвращает другое значение на основе соответствующей записи. Здесь мы использовали его для создания списка возраста из карты человека.

Несмотря на свою простоту, приведенный выше пример можно улучшить с помощью оператора точки (*.), заменив collect на println mapOfPeople*.value.age

Где для каждой записи в mapOfPeople мы обращаемся к элементу value, а затем получаем его атрибут age. Как будто мы обращаемся к каждому элементу по отдельности, но одна и та же операция «распространяется» на всю Карту.

Окончательный пример

Последний пример обобщает изученный контент.

Это напоминает обычную задачу в ежедневном программировании. Там, где у нас есть данные, мы фильтруем их, получаем доступ к определенному свойству данных и применяем функцию к этим свойствам.

Здесь мы суммируем количество продаж домов, где эти данные были получены из Карты Продаж. Вам может быть интересно, почему мы использовали == вместо equals? Это потому, что Groovy переопределяет операторы, где для Strings == выполняется скрытым методом equals.

Вывод

В этой статье мы узнали о языке программирования Groovy, мы упомянули несколько его особенностей, но есть много других, и вам рекомендуется следовать ссылке в [1], чтобы узнать больше.

Библиография

[1] Отличный. http://www.groovy-lang.org/