Что такое groovy

Что такое groovy

Хочу всё знать: язык Groovy

Если вы никогда не слышали о языке программирования Groovy, то сейчас самое подходящее время начать им интересоваться. Всё дело в том, что в рейтинге TIOBE, основанном на популярности языков в поисковых системах, Groovy занял 18 место, обойдя за последний год уже знакомые нам Dart и R и вплотную приблизившись к индексам Visual Basic и Object Pascal.

Так что в этом языке такого удивительного и почему только сейчас, спустя 13 лет после своего создания, он начал подбираться к лидирующим позициям?

Краткая справка

Прежде чем понять феномен Groovy, обратимся к моменту его создания. Впервые он был упомянут в 2003 году, как язык, дополняющий Java с возможностями Python, Ruby и Smalltalk. Надо понимать, что в то время Java уже был самым популярным языком программирования, поэтому разработчики пытались придумать не замену, а скорее улучшение.

Так Groovy оказался в компании Java-подобных языков, среди которых также выделялся Scala. Вплоть до 2015 года именно последнему прочили стать заменой Java (самое удивительное, что эти слова принадлежат никому иному, как создателю Groovy Джеймсу Стрэчену), но судьба похоже распорядилась иначе.

Преимущества

Спросив любого человека, который имеет опыт работы с Groovy, вы узнаете, что главное преимущество Groovy – это то, что он спокойно «проглатывает» программы на Java. Если искать сравнение в графике, то Groovy – это новый слой, который, с одной стороны, основывается на исходном изображении и может его в точности повторять, а с другой – способен на качественные преобразования исходника.

Впрочем, есть и реальные полезности, как то возможность использовать замыкания, статическая и динамическая типизации или специальный синтаксис для работы с массивами, списками и регулярными выражениями. Однако именно «бесшовное» сопряжение с Java, сдобренное относительной легкостью изучения, помогло Groovy найти отклики в сердцах программистов.

Что касается стремительного взлёта за последний год, то основной причиной послужил переход под знамена Apache Foundation в мае 2015 года. Сразу после этого, многие ведущие технологические компании, опираясь на репутацию Apache, начали на постоянной основе внедрять и использовать Groovy в качестве одного из инструментов. И стоит признать, от этого сотрудничества пока все в выигрыше.

Кому стоит учить

Всем, кто хочет быть на передовой, чья профессия связана с Java, тестировщикам и тем, кто хочет просто немного расширить свои горизонты. А может вам просто надоело работать со Scala, как например вице-президенту Twitter.

Что почитать

Как всегда, начинаем с перечисления ресурсов от производителя:

http://www.groovy-lang.org — официальный сайт. Если вы последний раз заходили сюда пару лет назад, то сильно удивитесь, как косметическим преобразованиям, так и разделу под названием Documentation. В Apache Foundation быстро нашли причину ранней непопулярности Groovy и поспешили снабдить пользователя всей необходимой информацией;

http://www.groovy-lang.org/events.html — важные мероприятия, посвящённые Groovy. В России они, к сожалению, пока не проводятся, зато если соберётесь в отпуск заграницу – не забудьте заглянуть и поинтересоваться, нет ли поблизости какой конференции.

Далее перейдем к хорошим книгам:

Grails. Гибкость Groovy и надежность Java, Глен Смит, Питер Ледбрук – прекрасная книга, посвященная главному фреймворку Groovy с массой практических уроков. Преимущественно для веб-разработчиков;

Groovy и Grails. Практические советы, Башар Абдул-Джавад – не столь увлекательное чтиво по сравнению с предыдущим (субъективно), но также будет иметь практическую ценность;

Making Java Groovy, Кеннет Коузен — книга, ориентированная на Java-разработчиков, которым захотелось сделать свою жизнь чуть проще.

Завершим знакомство с Groovy сторонними, но от того не менее полезными ресурсами:

https://habrahabr.ru/post/122127/ — всего за 15 минут вы прочитаете и усвоите основны Groovy.

https://ru.wikibooks.org/wiki/Groovy — довольно неплохой викиучебник на русском языке;

Testing with Groovy — если вы тестировщик и всё ещё читаете этот текст, то эта ссылка специально для вас;

Groovy за 15 минут – краткий обзор

Groovy — объектно-ориентированный язык программирования разработанный для платформы Java как альтернатива языку Java с возможностями Python, Ruby и Smalltalk.

Groovy использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java кодом и библиотеками. Язык может использоваться в любом Java проекте или как скриптовый язык.

Возможности Groovy (отличающие его от Java):

— Статическая и динамическая типизация
— Встроенный синтаксис для списков, ассоциативных массивов, массивов и регулярных выражений
— Замыкания
— Перегрузка операций

Более того, почти всегда java-код — это валидный groovy-код.

Установка

Для установки нужно скачать архив с оф. сайта , распаковать его в удобное место и добавить переменyю окружения GROOVY_HOME, и добавить путь до groovy/bin в PATH:

В IDE NetBeans 7.0 поддержка groovy идет из коробки, для IDE Eclipse существует очень хороший плагин, который можно взять здесь.

Groovy

Самое главное отличие от java: в Groovy всё является объектами. Все примитивные типы сразу же упаковываются в объекты. Т.е. «int x» на самом деле является «Integer x»

Следует не забывать о том, что все упаковочные типы — неизменяемые, поэтому каждый раз при каком-либо вычислении будет создаваться новый объект.

Строки в Groovy

1) Java Strings — строки в одинарных кавычках
2) Groovy Strings, они же GStrings — в обычных кавычках
В строках groovy можно вставлять параметры, в обычные строки — нельзя

К строкам применимы операции + и *

Так же к строкам применимы ++ и — — (т.к. в groovy поддерживается перегрузка операторов)

В groovy есть поодержка регулярных выражений на уровне конструкций языка:

Встроенная поддержка maps + lists

Так же на уровне конструкций языка поддерживаются словари (maps) и списки:

Ranges

Получать доступ к элементам списков в groovy можно следующим образом:

Range — это такой же объект, поэтому возможны конструции, подобные последней. Отрицательные индексы, как в python, возвращают элементы с конца списка.

Range можно составить из строк:

Более того, range можно сделать из любого объекта, у которого есть методы next() и prev().

Циклы

Циклы в groovy точно такие же, как и в java, плюс к ним добавляется еще один «foreach»:

Функции

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

Closures

Closure — это анонимная функция

У многих объектов есть методы, в качестве параметров которым передаются closure:

Доступно большое количество методов для обработки последовательностей, к которым можно применять замыкания:

В closure так же не обязательно использовать ключевое слово return. Если явно не задано имя параметру, то по умолчанию используется it.

Так как closure является объектом, то ничего не мешает возвращать его из другого closure, и таким образом создавать функции высших порядков:

Файлы

Для директорий есть функции eachFile и eachFileRecursive:

Для обработки текстовых файлов — функция eachLine:

Писать в файлы так же очень удобно:

Классы

Неизменяемые классы задаются с помощью аннотации Immutable:

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

Операторы

Проверяет переменную a, и если в ней null или false, то берет указанное следом значение. Иначе берется значение переменной a.

«?.» Safe navigation
Используется для избежания ошибки NullPointerException

Вернет null, если если в user содержится null вместо того, чтобы бросать NullPointerException.

«*.» Spread operator
Применяет указанный метод для всех элементов какой-либо коллекции. Эквивалент следующему:

Так же монжо использовать для составления списков и словарей:

В Groovy можно перегружать операторы +, -, * и т.п. Для этого нужно определить соотвествующий метод для класса. Например, для перегрузки оператора ++ нужно переопределить метод next():

SQL запросы обрабатываются очень просто:

В groovy существуют билдеры, которые можно использовать для генерации XML. Для генерации создается экземпляр объекта MarkupBuilder, на котором вызываются псевдо-методы — название этого метода и переданные параметры будет использоваться для генерации тега:

В качестве параметра конструктору MarkupBuilder можно передавать любой PrintWriter:

Парсинг XML так же очень простой:

Groovlets

С помощью класса GroovyServlet возможно запускать скрипты на Groovy как сервлеты.
В первую очередь, для этого нужно добавить несколько строчек в web.xml:

Теперь все запросы для файлов .groovy будут обрабатываться классом GroovyServlet.
В этих скриптах уже доступны для использования следующие переменные:

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.adoc

Groovy is a powerful multi-faceted programming language for the JVM platform. It supports a spectrum of programming styles incorporating features from dynamic languages such as optional and duck typing, but also static compilation and static type checking at levels similar to or greater than Java through its extensible static type checker. It aims to greatly increase developer productivity with many powerful features but also a concise, familiar and easy to learn syntax.

It integrates smoothly with any Java class or library, and immediately delivers to your application powerful capabilities, including scripting support, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.

Distribution links are on the download page.

Maven, Gradle and Ivy dependency declaration snippets are available on specific files of a particular module.

Obtaining the Source

You don’t need the source code to use Apache Groovy but if you wish to explore its inner workings or build it for yourself there are two ways to obtain the source files.

Checking out from Version Control

Apache Groovy uses Git. The official Git repository is at:

And a mirror is hosted on GitHub:

The GitHub mirror is read-only and provides convenience to users and developers to explore the code and for the community to accept contributions via GitHub Pull Requests.

Simply git clone the repo (or the repo you forked via the GitHub website) and you will have the complete source.

Unpacking the src distribution

Alternatively, you can download the source distribution and unpack it.

If obtaining the source from the source distribution and you intend to build from source, you also need to download and install Gradle and use it to execute one bootstrap step.

As mentioned in the previous paragraph, if you download the source distribution you need to bootstrap Gradle. This isn’t needed if you clone from the GitHub repo.

Each version of Groovy is built and tested using a specific version of Gradle. That version is specified by the gradle_version property defined in the gradle.properties file within the root directory. Luckily you shouldn’t need to know that version and, after bootstrapping, you should use the gradlew command which will ensure the correct version is always used.

The version of Gradle used for the bootstrap step has some flexibility though in general you might need to download a version similar to the version of Groovy the build is expecting.

To bootstrap Gradle, at the top directory of your unpacked source, run the command:

Ссылка на основную публикацию