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

Groovy
Изображение логотипа
Класс языкаобъектно-ориентированный, императивный, сценарный язык, язык функционального программирования, мультипарадигмальный, интерпретируемый, язык JVM, открытое программное обеспечение и свободное программное обеспечение
Появился в2003
АвторДжеймс Стрэкан[d]
РазработчикJava Community Process и Apache Software Foundation
Расширение файлов.groovy[2], .gvy[2], .gsh[2] или .gy[2]
Выпуск
Испытал влияниеPython, Java, Ruby, Perl и Smalltalk
ЛицензияApache License 2.0 и лицензия Apache
Сайтgroovy-lang.org (англ.)
groovy.apache.org
ОСкроссплатформенность
Логотип Викисклада Медиафайлы на Викискладе

Использует java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим java-кодом и библиотеками. Язык может использоваться в любом java-проекте или как сценарный язык. Активно используется как Предметно-ориентированный язык для написания скриптов при работе в предметной области (от математики до обработки научных данных), а также сборки и тестирования приложений (Gradle).

Groovy завершил процесс стандартизации в Java Community Process (JSR 241).

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

На Groovy создано ряд популярных веб-фреймворков, в том числе Grails и Ratpack, фреймворк для создания настольных приложений Griffon[en], платформа тестирования Spock[en].

Язык нашёл применение в качестве сценарного для расширения возможностей платформенного программного обеспечения. В частности, генератор отчётов iReport, основанный на Java-библиотеке JasperReports, позволяет встраивать в отчёты выражения на Groovy и писать на нём дополнительную логику. Система непрерывной интеграции Jenkins позволяет использовать сценарии автоматизации, созданные на Groovy. Приложение для тестирования веб-сервисов SoapUI поддерживает написание тестовых сценариев на Groovy[3].

Программирование на Groovy поддерживается в основных интегрированных средах разработки[4], в том числе IntelliJ IDEA (начиная с версии 7 или для более ранних версий с использованием JetGroovy Plugin), Eclipse (с использованием Groovy Eclipse), Netbeans (встроен), VS Code (через расширение), Vim (через расширение).

История

Первым упоминанием о языке было сообщение в блоге Джеймса Стрэкана (англ. James Strachan)[5] от августа 2003 года. Позднее было выпущено несколько версий между 2004 и 2006 годами. После того, как начался процесс стандартизации JCP, нумерация версий была изменена, и версию называют «1.0». Версия «1.0» была выпущена 2 января 2007 года. В декабре 2007 года вышел Groovy 1.1, эта версия вскоре была перенумерована как «1.5» вследствие значительных изменений в языке.

Стрэкан покинул проект за год до выпуска Groovy 1.0 в 2007 году, а в июле 2009 года Стрэкан написал в своём блоге, что возможно не создал бы Groovy, если бы в 2003 году прочитал книгу Мартина Одерского с соавторами о программировании на языке Scala (вышедшую в 2007 году)[6].

Проект разработки языка и комитет JSR-241 с 2007 года возглавляет Гийом Лафорж (Guillaume Laforge). Компанию G2One, занимавшуюся развитием и коммерциализацией языка и фреймворка Grails, осенью 2008 года приобрела SpringSource[en], в итоге через цепочку слияний и поглощений (VMware, Pivotal, EMC) актив перешёл в 2017 году в корпорацию Dell. С 2015 года язык является проектом верхнего уровня фонда Apache.

В 2020 году вышла версия 3.0.0 с рядом значительных улучшений.

Скриншот Groovy Console

Примеры

Классический пример вывода на печать строки с приветствием:

// Commentprint("Hello world!")

Пример создания и использования функции с аргументами и возвращаемым значением:

def helloFunction(name) {    println("Hello, ${name}")}helloFunction("Groovy!")// В следующей функции вычисления суммы двух объектов// последнее выражение является возвращаемым значениемdef sum(a, b) {    a + b // вернет результат сложения}print(sum(1, 2))// Эта функция принимает параметры только числового типаdef subtraction(double a, double b) {    return a - b}print(subtraction(6, 4))

Объявление класса, создание его экземпляра и вызов его методов в главной точке входа программы (статический метод main())

class Foo {  def doSomething() {    def data = ["name": "James", "location": "London"]    for (e in data) {      println("entry ${e.key} is ${e.value}")    }  }    def closureExample(collection) {    collection.each { println("value ${it}") }  }    static void main(args) {    def values = [1, 2, 3, "abc"]    def foo = new Foo()    foo.closureExample(values)    foo.doSomething()  }}

«;» — точка с запятой в конце строки не обязательна.

Некоторые особенности

Как и в Java (начиная с 11-й версии), исходный код Groovy может быть выполнен как обычный сценарий: для этого он должен содержать код вне определения класса или класс с методом main, или Runnable, или GroovyTestCase:

#!/usr/bin/env groovyprintln "I can execute this script now!"

Строки в Groovy: Java Strings с одинарными кавычками и GStrings с двойными кавычками:

def javaStyleString = 'java String style'def GStringsStyleString = "${javaStyleString}"def j = '${javaStyleString}' def bigGroovyString = """    ${javaStyleString}    ${GStringsStyleString}"""println bigGroovyString

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

closureFunction 1,2

Примечания

Ссылки


🔥 Top keywords: Заглавная страницаЯндексДуров, Павел ВалерьевичСлужебная:ПоискYouTubeЛунин, Андрей АлексеевичПодносова, Ирина ЛеонидовнаВКонтактеФоллаут (телесериал)WildberriesTelegramРеал Мадрид (футбольный клуб)Богуславская, Зоя БорисовнаДуров, Валерий СемёновичРоссияXVideosСписок умерших в 2024 годуЧикатило, Андрей РомановичFallout (серия игр)Список игроков НХЛ, забросивших 500 и более шайбПопков, Михаил ВикторовичOzon17 апреляИльин, Иван АлександровичMail.ruСёгун (мини-сериал, 2024)Слово пацана. Кровь на асфальтеПутин, Владимир ВладимировичЛига чемпионов УЕФАГагарина, Елена ЮрьевнаБишимбаев, Куандык ВалихановичЛига чемпионов УЕФА 2023/2024Турнир претендентов по шахматам 2024Манчестер СитиMGM-140 ATACMSРоссийский миротворческий контингент в Нагорном КарабахеЗагоризонтный радиолокаторПинапВодительское удостоверение в Российской Федерации