Язык груви для чайников + видео обзор

Содержание
  1. Хочу всё знать: язык Groovy
  2. Краткая справка
  3. Преимущества
  4. Кому стоит учить
  5. Что почитать
  6. Краткая справка
  7. Преимущества
  8. Кому стоит учить
  9. Что почитать
  10. Groovy
  11. Содержание
  12. Первая программа [ править ]
  13. Комментарии и демонстрация результата [ править ]
  14. Переменные [ править ]
  15. Строки [ править ]
  16. Списки [ править ]
  17. Maps (Отображения) [ править ]
  18. Условное исполнение [ править ]
  19. Логические выражения [ править ]
  20. Closures [ править ]
  21. Работа с файлами [ править ]
  22. Работа со строками [ править ]
  23. Classes and Objects [ править ]
  24. Groovy: часть 2 — Hello World и базовый синтаксис
  25. Hello, Groovy
  26. Оператор Import
  27. Токены
  28. Комментарии в Groovy
  29. Точка с запятой
  30. Идентификаторы
  31. Ключевые слова
  32. Пробелы
  33. Литералы
  34. Groovy как скриптовый язык и DSL для Java
  35. Зачем?
  36. Groovy за 15 минут – краткий обзор
  37. Установка
  38. Groovy
  39. Строки в Groovy
  40. Встроенная поддержка maps + lists
  41. Ranges
  42. Циклы
  43. Функции
  44. Closures
  45. Файлы
  46. Классы
  47. Операторы
  48. Groovlets
  49. Список используемых источников:
  50. Читают сейчас
  51. Редакторский дайджест
  52. Похожие публикации
  53. Как написать (игрушечную) JVM
  54. Варим байткод на кухне JVM
  55. Groovy vs Java для JavaFX
  56. Курсы
  57. Минуточку внимания
  58. Комментарии 50
  59. Видео

Хочу всё знать: язык 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, то сейчас самое подходящее время начать им интересоваться. Всё дело в том, что в рейтинге 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

Содержание

Первая программа [ править ]

Откройте редактор и напишите программу. По традиции, первая программа должна просто выводить приветствие миру:

Сохраните её в файл helloworld.groovy и запустите.

На экране появится надпись:

На этом традиционную часть можно считать выполненной.

Комментарии и демонстрация результата [ править ]

Комментарием называется часть программного кода, пропускаемая при обработке (интерпретации или компиляции).

Переменные [ править ]

Переменная в Groovy определяется ключевым словом def (это аналогично типу Object в Java):

Строки [ править ]

В Groovy есть 2 типа строк:

Списки [ править ]

Groovy содержит встроенную поддержку списков. Списки объявляются путем перечисления элементов в квадратных скобках:

Обращение к элементам списка осуществляется по индексу, как к массиву в Java:

Новые элементы могут быть добавлены в список различными способами:

Теперь, совместное использование списков и ranges:

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

Также, Groovy предоставляет встроенный цикл, для перебора элементов списка, или элементов любого объекта, реализующего интерфейс java.lang.Iterable:

Maps (Отображения) [ править ]

Аналогично спискам, Groovy поддерживает прозрачный синтаксис для работы с maps (ассоциативными массивами). Объявление выглядит следующим образом:

Также, существует специальный синтаксис для объявления пустых отображений:

Доступ к элементам осуществляется по ключу, с использованием оператора [], или же с ключом как полем:

Аналогично производится и изменение элементов:

Для хранения объектов в качестве ключа можно использовать скобки ():

Условное исполнение [ править ]

Одной из наиболее важных особенностей любого языка программирования является возможность выполнять различные коды в разных условиях. Простейший способ сделать это состоит в использовании IF конструкции. Например:

Не беспокойтесь о длинной первой строке, это просто какой-то код, чтобы определить, сейчас утро или вечер. Остальная часть кода выполняется следующим образом: сначала оценивается выражение в круглых скобках и в зависимости от результата true (истинно) или false (ложно) выполняется первый или второй блок кода. Смотрите ниже раздел логические выражения.

Обратите внимание, что ​​блок else не требуется, в отличие от первого блока:

Логические выражения [ править ]

Более сложные логические выражения используют один из булевых операторов:

Функции и методы всегда возвращают, как результат, последнее выражение.

Closures [ править ]

Синтаксис замыкания : < [closureArguments->] statements >

В замыканиях по умолчанию присутствует переменная it и ссылается на первый параметр в замыкании:

Определение замыкания в классе и его вызов:

Специальный класс Expando для создания динамических объектов и методов (как замыкания) которые можно вызывать:

Работа с файлами [ править ]

Работа со строками [ править ]

Classes and Objects [ править ]

Описание и создание класса(по умолчанию класс имеет тип доступа public, а переменные класса имеют тип доступа private, но компилятор groovy сам сделает для этих полей геттеры и сеттеры с доступом public):

Для обновления поля или полей можно использовать такой подход:

Источник

Groovy: часть 2 — Hello World и базовый синтаксис

Hello, Groovy

Самый простой способо выполнить «Hello, World» — используя Groovy shell :

И выполнить println(‘Hello World’) :

Либо — в виде скрипта:

Оператор Import

Оператор import используется (внезапно) для импорта библиотек для использования в вашем коде.

В примере ниже — выполняется импорт класса MarkupBuilder :

По умолчанию — Groovy выполняет импорт следющих библиотек:

Токены

Токеном (token) может являться ключевое слово, идентификатор, константа, строковый литерал или просто символ.

Комментарии в Groovy

В Groovy имеются как однострочные так и многострочные комментарии.

Однострочный комментарий начинается с символов // и могжет быть помещен в любом месте кода:

Точка с запятой

В оригинале говорится «[…] it is required to have semicolons […] Groovy» — на самом деле их не обязательно использовать каждый раз.

Может — в более старых версиях Groovy они требовались? http://groovy-lang.org/semantics.html: «In Groovy semicolons at the end of the line can be omitted, if the line contains only a single statement.»

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

Оба примера будут работать одинаково:

Однако при использовании нескольких операторов в одной строке — их необходимо разделять:

Иначе — возникнет ошибка:

Идентификаторы

def тут — ключевое слово, используемое в Groovy для определения идентификатора.

Пример использования идентификатора в нашей Hello, World программе:

Ключевые слова

Ключевые слова — это специальные слова, зарезирвированные в Groovy для самого языка:

asassertbreakcase
catchclassconstcontinue
defdefaultdoelse
enumextendsfalseFinally
forgotoifimplements
importininstanceofinterface
newpullpackagereturn
superswitchthisthrow
throwstraittruetry
while

Пробелы

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

В следующем примере — переменные отделяют ключевое слово def от переменной x :

Литералы

Литерал — обозначение для представления фиксированного значения в Groovy.

В Groovy имеются целочисленные (integer), символьные и строковые литералы, например:

Источник

Groovy как скриптовый язык и DSL для Java

Зачем?

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

Наверное, самыми простыми примерами таких сценариев, с которыми все сталкивались в том или ином виде, могут служить обычные пакетные файлы — bat или sh.

В своей практике, я иногда использую XML для описания сценариев. В случае, четко определенного заранее набора действий и их простого плоского набора без ветвлений — XML не плох для использования. Тут и фиксированная структура, позволяющая валидировать файл сценария, и простота самого языка XML, позволяющая с ним работать не только программистам. Однако реализовывать ветвления или условную логику в XML, на мой взгляд, очень накладно и сродни написанию своего мини языка. Расширение набора действий чаще всего возможно только при изменении исходного кода программы, да и изначально реализация поддержки XML сценария трудозатратна.

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

Скрипты

Я не буду рассказывать основы Groovy, так как материалов в сети даже на русском уже предостаточно. Остановлюсь лишь на некоторых ключевых для нас моментах.

Groovy позволяет нам из Java кода выполнять не скомпилированный исходный Groovy код, что позволяет нам выполнять сценарии добавленные или измененные в runtime.

Рассмотрим пример выполнения Groovy скрипта в Java. Для поддержки Groovy в Вашем Java проекте нужно подключить в зависимости лишь одну библиотеку «groovy» нужной Вам версии.

Напишем следующий Groovy код в файле x:\GroovyScript.groovy:

Код для выполнения данного скрипта в Вашем Java код может быть таким:

В итоге выполнения, в консоль выведется 2 строки, первая из скрипта, вторая — из Java, с результатом выполнения скрипта:

Groovy script
result=16

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

Немного о Java коде. GroovyShell – это класс предоставляемый Groovy для выполнения groovy скриптов. Существуют и другие способы выполнения groovy скриптов, подробнее смотрите тут

DSL – domain-specific language или предметно ориентированный язык. Язык, позволяющий использовать основные операции предметной области через набор простых и понятных высокоуровневых функций, скрывающий от пользователя их реализацию.

В приведенном выше примере код достаточно простой, однако в реальном сценарии он может быть очень большим и сложным. И работать с такими скриптами смогут только groovy-разработчики, избежать ошибок без тестирования будет сложно. В случае заранее известных операций в сценариях, всю бизнес логику можно вынести в код (java или groovy — неважно), и предоставить возможность использовать ее через набор функций.

Рассмотрим небольшой пример. Требуется написать скрипт, который будет выполнять архиваций, распаковку архивов, удаление, некоторые проверки и уведомления.
Один их кусочков сценария мог бы быть таким – проверить состояние процесса и в случае его завершения заархивировать каталог и послать уведомление:

//import

//check state
Process p = getProcess ( … )
int state = p. getCompleteState ( … )
if ( state == 1 ) <
//doSomeLogicForArchive
Zip z = new Zip ( … )
z. makeZip ( … )
> else <
//doAnotherLogic
return
>
//doSomeLogicForSendNotify
Smtp smtp = new Smtp ( … )
Message m = new Message ( … )
smtp. send ( to,m. )

Код получается достаточно большим, и он будет понятен, в основном, лишь программистам. Давайте его упростим и вынесем три указанных действия в класс ArchiveScript со статическими методами. Скрипт после вынесения методов:

Уже лучше? — Лучше, но все еще есть артефакты – импорт и названия класса, которые тоже стоило бы убрать. И в Groovy есть подобная возможность – возможность задания базового класса для скрипта вне самого скрипта. Класс ArchiveScript для этого должен наследоваться от Script и методы могут быть не статическими. Код скрипта при этом еще упрощается – исчезает импорт и префикс класса:

Уже достаточно хорошо. В случае если код внутри блока ветвления условия однострочный, можно отказаться и от фигурных скобок. А в случае Groovy часто и от скобок справа от имени метода. Код выполнения скрипта немного усложняется — нужно создать объект CompilerConfiguration, установить значение scriptBaseClass равное имени созданного нами класса ArchiveScript и передать этот объект в GroovyShell:

CompilerConfiguration conf = new CompilerConfiguration ( ) ;
conf. setScriptBaseClass ( «package.ArchiveScript» ) ;
GroovyShell shell = new GroovyShell ( conf ) ;

Далее, давайте рассмотрим, как задаются параметры методов в скрипте при вызове. В случае определения в классе ArchiveScript метода makeArchive в таком виде:

def makeArchive ( sourcePath, destPath, deleteSource )

В скрипте вызов должен был бы выглядеть так:

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

Однако в этом случае параметры будут передаваться внутри HashMap и, соответственно, получение параметров в makeArchive в классе ArchiveScript должно быть таким:

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

И это уже не слишком сложный и достаточно читаемый код.

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

Замечу, что я рассмотрел лишь малую толику разработки DSL. В Groovy есть более широкая поддержка разработки своего DSL, а так же DSL-поддержка для Eclipse и для IntelliJ Idea

Тестирование

Хотелось бы сказать несколько слов о тестировании сценариев. Каким бы простым не был скрипт, ошибки могут быть и в нем. Даже если Вы пишите сценарии в IDE, полноценной проверки на корректность синтаксиса Вы можете не получить. Это возможно лишь при его выполнении. Так же необходимо проверять поведение скрипта.
Так как нам не хотелось бы выполнять реальные действия при выполнении тестирования сценария, то нужно каким-то образом заменить реальную логику на имитацию. Groovy позволяет нам это сделать многими путями. Покажу несколько из них.

Замена базового скрипта

Создаем новый класс ArchiveSciptMock который имеет интерфейс аналогичный ArchiveScript, и реализующий нужное нам поведение (или ничего не делающий). При создании объекта конфигурации CompilerConfiguration передаем его имя вместо оригинала.

CompilerConfiguration conf = new CompilerConfiguration ( ) ;
conf. setScriptBaseClass ( «package.ArchiveScriptMock» ) ;

Замена методов в базовом классе скрипта

Другим вариантом без создания дополнительного mock класса может быть замена методов на mock в самом ArchiveScript. В groovy это можно сделать, например, таким способом:

Недостатком и первого и второго способа я бы считал необходимость написания дублирующей логики по проверки правильности передаваемых параметров. Так как если в ArchiveScriptMock метод makeArchive будет таким:

def makeArchive ( params ) <
//makeArchiveInternal params.sourcePath, params.destPath, params.deleteSource
>

То мы не проверим все ли параметры были переданы. Нужно будет писать что-то похожее на это:

Я бы предложил сделать небольшой рефакторинг ArchiveScript — сделать ArchiveScript фасадом и всю логику перенести в другой класс. Например, в Java класс Archive.
Рефакторинг — не только для целей тестирования, но и из других соображений, например, для отделения поведения от способа выполнения (нет зависимости от Script). В итоге, после изменения, ArchiveScript примет такой вид:

Теперь, можно тестировать логику и сценарий в отдельности. Заменим Archive на его mock и выполним скрипт:

Естественно поведение Archive можно заменить и с помощью java mock фреймворков, однако, нам пока достаточно и этого.

Я считаю, что получил достаточно гибкий инструмент для написания сценариев, без недостатков, озвученных в начале текста, а также достаточно простотой в использовании. Контроль корректности сценария так же не был потерян — использование mock поведения позволяет нам тестировать их в достаточной мере, перед реальным выполнением.

Проект с исходными кодами проекта — groovydsl. Компилируется Gradle через враппер.

Некоторые идеи взяты из книги Groovy for Domain-Specific Languiages, Fergal Dearle, 2010

Источник

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

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

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

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

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

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

Установка

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

Groovy

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

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

Строки в Groovy

1) Java Strings — строки в одинарных кавычках
2) Groovy Strings, они же GStrings — в обычных кавычках
В строках 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
Применяет указанный метод для всех элементов какой-либо коллекции. Эквивалент следующему:

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

Оператор «==» уже перегружен для всех объектов — и вызывает метод «isEquals()». Полный список методов, которые нужно переопределить для перегрузки операторов, доступен здесь: http://groovy.codehaus.org/Operator+Overloading.

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

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

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

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

Groovlets

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

— request & response
— context, application, session
— out (= response.getWriter())
— sout (= response.getOutputStream())
— html (= new MarkupBuilder(out))

Отдаст браузеру сгенерированную html-страницу.

Список используемых источников:

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Читают сейчас

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Язык груви для чайников

Похожие публикации

Как написать (игрушечную) JVM

Варим байткод на кухне JVM

Groovy vs Java для JavaFX

Курсы

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Минуточку внимания

Комментарии 50

Язык груви для чайников

Язык груви для чайников

есть модуль goovy под ibm websphere portal, в принципе, оно работает, но…

штука эта от сторонней компании, фриварная и без обязательств, соответственно ibm ее не суппортит, и если что вдруг легло, то типа разбирайтесь сами

в общем, пока в корпоративный сегмент им рано, вот лет через 5, как повзрослеют…

Я писал в блоге об этом некоторое время назад — дам поэтому ссылку mantonov.blogspot.com/2011/04/groovy-c-java-production-1.html

Мы внедряем Groovy достаточно давно в разных частях достаточно крупного (в общей сложности более 3 млн строк Java кода) и достаточно старого проекта на Java, наталкиваемся на некоторые неожиданные сложности и нестыковки, но пока вроде бы получается находить решения.

Groovy разрабатывается компанией SpringSource(подразделение VMWare) — команда, что разрабатывает Spring, Apache Tomcat, Apache HTTPD, RabbitMQ, Redis, AspectJ и многие другие опенсорсные(и не только) проекты. Groovy-related вещами занимается около 8 человек. Success stories можно почитать на сайте SS.

Из популярных продуктов — Grails, на Dice.com вакансий по нему больше чем по Tapestry, Wicket, примерно одинаковое с Django & Zend. Очень активный мейл-лист.

Groovy также популярен как DSL: Gradle & Maven 3 (Build Tools), Geb (Web testing via Selenium Webdriver), Griffon (Java GUI), Spock (BDD/TDD), GPars (Parallelism, Concurrency, Actors..), Play! framework(as a Template Engine). Есть плагины для анализа кода — CodeNarc, опциональное статическое типизирование Groovy++.

Есть поддержка IDE: SpringSource Tool Suite(бесплатный набор плагинов к Eclipse) & IntelliJ IDEA(Groovy есть даже в бесплатной Community версии), Netbeans + текстовые редакторы.

Вообщем вполне себе здоровое сообщество — не забываем, что вы можете использовать без проблем Java библиотеки, наследывать Java классы и наоборот (JavaClass extends GroovyClass).

Язык груви для чайников

Можно создать классы на Groovy с аннотациями из hibernate, а затем использовать эти домены в java коде? Нет каких-то подводных камней?

Для Groovy видел кучу всяких библиотек и фреймворков — есть там что-нибудь интересного, чтобы взяться за голову и сказать — как же я раньше без этого жил? 🙂

Язык груви для чайников

Насчет hibernate не пробовал, но в EJB проектах можно использовать groovy и аннотации — ссылка. Думаю, все будет хорошо работать. Так же при смешивании java и groovy классов лучше придерживаться такого правила: интерфесы писать на java, а реализацию — на groovy. Тогда эти интерфейсы затем можно использовать где угодно, хоть в java, хоть в groovy.

Насчет взяться за голову — да, есть такое. После python в джаве иногда становится очень грустно… И на помощь приходит groovy.

И код выразителен. Вот, например, сравните:
Groovy:

Какой вариант вам больше нравится? 🙂

Язык груви для чайников

В java можно и так:

query.setAttributes(new HashMap( <<
put(«column», «subject»);
put(«table», «emails»);
>>));

Но синт. сахар меня не возбуждает уже, вышел из этого возраста 🙂 Для меня важнее наличие клёвых библиотек и фреймворков, которые упрощают и ускоряют разработку. Например, в Tapestry 5 и не нужно так делать с параметрами для шаблона. Т.е. не нужно вот этого кода вообще:

groovy+какой-то веб-фреймворк:
def query = group.getInstanceOf(«/index»);
query.setAttributes([«column»: «subject», «table»: «emails»])

Язык груви для чайников

Язык груви для чайников

Ну да, я поэтоу и думаю не уходить в крайности, а использовать плюсы groovy в java.

Tapestry 5 рекомендую, если делаете что-то кастомное и оригинальное. Если же нужно сделать, что-то шаблонное, типа блога за 15 минут, то со сторонними компонентами в Tapestry 5 сейчас не очень (значительно хуже, чем с плагинами в Grails).

Источник

Видео

Groovy. 1. Введение

Groovy. 1. Введение

5 ХУДШИХ языков программирования, которые не стоит учить!

5 ХУДШИХ языков программирования, которые не стоит учить!

36. Язык Groovy - функции

36. Язык Groovy - функции

Groovy. 3. Первая программа

Groovy. 3. Первая программа

14. GROOVY скрипт - знакомство

14. GROOVY скрипт - знакомство

Groovy. 6. Операции с переменными

Groovy. 6. Операции с переменными

Groovy. 2. Установка программного обеспечения

Groovy. 2. Установка программного обеспечения

37. Использование классов, объектов в языке GROOVY

37. Использование классов, объектов в языке GROOVY

34. Циклы на языке GROOVY

34. Циклы на языке GROOVY

Евгений Борисов — Марлезонский балет по Groovy в трех частях

Евгений Борисов — Марлезонский балет по Groovy в трех частях
Поделиться или сохранить к себе:
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.