Groovy: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Преамбула: исправление
 
(не показаны 33 промежуточные версии 12 участников)
Строка 1: Строка 1:
{{Карточка языка программирования
{{Карточка языка программирования}}
| name = Groovy
| logo = Groovy-logo.png
| semantics =
| class =
| year = 2003
| designer = Джеймс Стрэкен
| typing = [[статическая типизация|статическая]] и [[динамическая типизация|динамическая]]
| latest_release_version = 3.0.8<ref>[https://github.com/apache/groovy/releases The Apache Groovy programming language - Groovy 3.0.8 Changelog<!-- Заголовок добавлен ботом -->]</ref>
| latest_release_date = [[16 апреля]] [[2021]]
| implementations =
| dialects =
| influenced_by = [[Java]], [[Ruby]], [[Python]], [[Perl]], [[Smalltalk]]
| influenced = [[Kotlin]], [[Swift (язык программирования)|Swift]]
| website = http://groovy-lang.org/
}}


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


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


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


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


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


Язык нашёл применение в качестве сценарного для расширения возможностей платформенного программного обеспечения. В частности, генератор отчётов [[iReport]], основанный на [[Java]]-библиотеке [[JasperReports]], позволяет встраивать в отчёты выражения на Groovy и писать на нём дополнительную логику. Система [[Непрерывная интеграция|непрерывной интеграции]] [[Jenkins (программное обеспечение)|Jenkins]] позволяет использовать сценарии автоматизации, созданные на Groovy. Приложение для тестирования веб-сервисов [[SoapUI]] поддерживает написание тестовых сценариев на Groovy<ref>{{cite web|url=https://www.soapui.org/scripting-properties/tips-tricks/|title=SOAP UI: Sample Scripts on Groovy}}</ref>.
# веб-фреймворк [[Grails]], основное применение язык нашёл именно в сочетании с ним.

# не-блокирующий веб-фреймворк [https://ratpack.io/ Ratpack].
Программирование на Groovy поддерживается в основных [[Интегрированная среда разработки|интегрированных средах разработки]]<ref>[http://groovy.codehaus.org/IDE+Support Список поддерживаемых IDE] {{webarchive|url=https://web.archive.org/web/20080204162340/http://groovy.codehaus.org/IDE+Support |date=2008-02-04 }} на [http://groovy.codehaus.org официальном сайте Groovy] {{webarchive|url=https://web.archive.org/web/20140302111159/http://groovy.codehaus.org/ |date=2014-03-02 }}</ref>, в том числе [[IntelliJ IDEA]] (начиная с версии 7 или для более ранних версий с использованием JetGroovy Plugin), [[Eclipse (среда разработки)|Eclipse]] (с использованием Groovy Eclipse), [[Netbeans]] (встроен), [[Visual Studio Code|VS Code]] (через расширение), [[Vim]] (через расширение).
# веб-фреймворк для создания сайтов и приложений на микросервисах [https://micronaut.io/ Micronaut].
# фреймворк для тестирования приложений [[:en:Spock_(testing_framework)|Spock]].
# десктоп фреймворк [[:en:Griffon_(framework)|Griffon]].
# фреймворк для теста сайтов [https://gebish.org/ Geb].
# фреймворк для параллельных и распределенных вычислений с использованием системы "акторов" [http://www.gpars.org/ Gpars].
# программный комплекс [https://sdkman.io/ SDKMAN!] для управления версиями языков Java, Groovy, Scala, Kotlin, [[Ceylon]] и приложений как: Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, [[Vert.x]] ([https://sdkman.io/sdks список всех]).
# [[ORM]] обертка над базами данных [http://gorm.grails.org/snapshot/index.html GORM].


== История ==
== История ==
Первым упоминанием о языке было сообщение в блоге {{Не переведено 2|Стрэчен, Джеймс|Джеймса Стрэчена|en|James Strachan (programmer)|James Strachan}}<ref>[http://radio.weblogs.com/0112098/2003/08/29.html James Strachan. Groovy — the birth of a new dynamic language for the Java platform] {{webarchive|url=https://web.archive.org/web/20070405085722/http://radio.weblogs.com/0112098/2003/08/29.html |date=2007-04-05 }}</ref> от августа 2003 года. Позднее было выпущено несколько версий между 2004 и 2006 годами. После того, как начался процесс стандартизации [[Java Community Process|JCP]], нумерация версий была изменена, и версию называют «1.0». Версия «1.0» была выпущена [[2 января]] [[2007 год]]а. В [[Декабрь 2007 года|декабре 2007 года]] вышел Groovy 1.1, эта версия вскоре была перенумерована как «1.5» вследствие значительных изменений в языке.
Первым упоминанием о языке было сообщение в блоге {{Не переведено 2|Стрэкан, Джеймс|Джеймса Стрэкана|en|James Strachan (programmer)|James Strachan}}<ref>[http://radio.weblogs.com/0112098/2003/08/29.html James Strachan. Groovy — the birth of a new dynamic language for the Java platform] {{webarchive|url=https://web.archive.org/web/20070405085722/http://radio.weblogs.com/0112098/2003/08/29.html |date=2007-04-05 }}</ref> от августа 2003 года. Позднее было выпущено несколько версий между 2004 и 2006 годами. После того, как начался процесс стандартизации [[Java Community Process|JCP]], нумерация версий была изменена, и версию называют «1.0». Версия «1.0» была выпущена [[2 января]] [[2007 год]]а. В [[Декабрь 2007 года|декабре 2007 года]] вышел Groovy 1.1, эта версия вскоре была перенумерована как «1.5» вследствие значительных изменений в языке.


Стрэчен покинул проект за год до релиза Groovy 1.0 в 2007 году, а в июле 2009 года Стрэчен написал в своём блоге, что возможно не создал бы Groovy, если бы в 2003 году прочитал книгу [[Одерски, Мартин|Мартина Одерского]] с соавторами о программировании на [[Scala (язык программирования)|языке Scala]] (вышедшую в 2007 году)<ref>{{cite web|url=http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html|title=Scala as the long term replacement for java/javac?|date=2009-07-06|accessdate=2012-01-07|archiveurl=https://www.webcitation.org/65LY4r0wg?url=http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html|archivedate=2012-02-10}} <cite>«I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy»</cite></ref>.
Стрэкан покинул проект за год до выпуска Groovy 1.0 в 2007 году, а в июле 2009 года Стрэкан написал в своём блоге, что возможно не создал бы Groovy, если бы в 2003 году прочитал книгу [[Одерски, Мартин|Мартина Одерского]] с соавторами о программировании на [[Scala (язык программирования)|языке Scala]] (вышедшую в 2007 году)<ref>{{cite web|url=http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html|title=Scala as the long term replacement for java/javac?|date=2009-07-06|accessdate=2012-01-07|archiveurl=https://www.webcitation.org/65LY4r0wg?url=http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html|archivedate=2012-02-10}} <cite>«I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy»</cite></ref>.


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


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


[[Файл:XGroovyConsole.gif.pagespeed.ic.MveHrO02zE.png|мини|Скриншот Groovy Console]]
# do-while циклы, лямбда выражения, try-with-resources,code blocks (анонимные блоки кода).
# инициализация массива в "Java style" (<code>new int[] {1, 2, 3}</code>).
# дефолтные(default) методы в интерфейсе.
# новые операторы сравнения и Элвис-оператор.
# инициализация не статических внутренних классов (<code>outer.new Inner()</code>)
# безопасные индексы (<code>nullableVar?[1, 2]</code>)

== Поддержка IDE ==
Программирование на Groovy поддерживается в основных [[Среда разработки программного обеспечения|интегрированных средах разработки программного обеспечения]]<ref>[http://groovy.codehaus.org/IDE+Support Список поддерживаемых IDE] {{webarchive|url=https://web.archive.org/web/20080204162340/http://groovy.codehaus.org/IDE+Support |date=2008-02-04 }} на [http://groovy.codehaus.org официальном сайте Groovy] {{webarchive|url=https://web.archive.org/web/20140302111159/http://groovy.codehaus.org/ |date=2014-03-02 }}</ref>, в частности:
* [[IntelliJ IDEA]] начиная с версии 7 или для более ранних версий с использованием JetGroovy Plugin;
* [[Eclipse (среда разработки)|Eclipse]] с использованием Groovy Eclipse;
* [[Netbeans]] — встроен в NetBeans IDE.

== Установка и настройка ==
На [https://groovy-lang.org/install.html странице загрузки] устанавливаем Groovy самым удобным способом.

Скрипты можно писать и запускать в [http://www.groovy-lang.org/groovyconsole.html Groovy Console], а набирать в интерактивном режиме код и запускать можно в [https://groovy-lang.org/groovysh.html Groovy Shell].

А также прямо из браузера через [https://groovyconsole.appspot.com/ Groovy Web Console] посмотреть работу этого языка.

Перед запуском проверьте чтобы в путях Вашей ОС были прописаны переменная GROOVY_HOME и путь в переменной PATH к исполняему файлу groovy.bat (или groovy.sh)

== Использование Groovy ==
Последние версии генератора отчётов iReport, основанного на [[Java]]-библиотеке [[JasperReports]], позволяют встраивать в отчёты выражения на Groovy и писать на нём дополнительную логику.

Система [[Непрерывная интеграция|непрерывной интеграции]] [[Jenkins (программное обеспечение)|Jenkins]] позволяет использовать сценарии автоматизации, созданные на Groovy.

Приложение для тестирования веб-сервисов [[SoapUI]] поддерживает написание тестовых скриптов на Groovy.<ref>{{cite web|url=https://www.soapui.org/scripting-properties/tips-tricks/|title=SOAP UI: Sample Scripts on Groovy}}</ref>


== Примеры ==
== Примеры ==
Классический пример вывода на печать строки с приветствием:
<source lang="groovy">
<syntaxhighlight lang="groovy">
// Comment
print("Hello world!")
</syntaxhighlight>Пример создания и использования функции с аргументами и возвращаемым значением:<syntaxhighlight lang="groovy">
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))
</syntaxhighlight>Объявление класса, создание его экземпляра и вызов его методов в главной точке входа программы (статический метод main())<source lang="groovy">
class Foo {
class Foo {
def doSomething() {
def doSomething() {
Строка 97: Строка 69:
</source>
</source>


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


== Некоторые особенности ==
Ещё пример, демонстрирующий возможности синтаксиса Groovy. Следующий простой Groovy-скрипт может быть прямо в этом виде исполнен:
Как и в Java (начиная с 11-й версии), исходный код Groovy может быть выполнен как обычный сценарий: для этого он должен содержать код вне определения класса или класс с методом main, или Runnable, или GroovyTestCase:
<syntaxhighlight lang="groovy">
["Rod", "Carlos", "Chris"].each{println it}
</syntaxhighlight>
Элементы списка (выглядит, как массив, но это список) будут напечатаны( стандартная переменная it внутри метода each указывает на текущий элемент массива).

Начиная с версии 3.0.8 ключевое слово ''var'' теперь аналогично слову ''def'' (как и в Java):<syntaxhighlight lang="java">
var text = "some a text"
println text
</syntaxhighlight>

== Особенности работы ==
В отличие от Java, в Groovy исходный код может быть выполнен как обычный скрипт, если содержит код вне определения класса или класс с методом main или Runnable или GroovyTestCase:
<source lang="groovy">
<source lang="groovy">
#!/usr/bin/env groovy
#!/usr/bin/env groovy
println "I can execute this script now!"
println "I can execute this script now!"
</source>
</source>

Строки в Groovy: Java Strings с одинарными кавычками и GStrings с двойными кавычками.
Строки в Groovy: Java Strings с одинарными кавычками и GStrings с двойными кавычками:
<source lang="groovy">
<source lang="groovy">
def javaStyleString = 'java String style'
def javaStyleString = 'java String style'
Строка 128: Строка 90:
</source>
</source>


Передачу параметров в методы, [[Замыкание (программирование)|замыкания]] или функции можно делать без скобок:
Groovy неявно генерирует методы для доступа к переменным (setColor(String color) и getColor()):

<source lang="groovy">
class AGroovyBean {
String color
}

def myGroovyBean = new AGroovyBean()

myGroovyBean.setColor('blue')
assert myGroovyBean.getColor() == 'blue'

myGroovyBean.color = 'green'
assert myGroovyBean.color == 'green'
</source>
Groovy предлагает простой и последовательный доступ к спискам, отображениям и массивам:
<source lang="groovy">
def myList = ['One', 'Two', 'Three'] //выглядит как массив, но это список
assert myList[2] == 'Three'
myList[3] = 'Four' //добавляем элемент в список
assert myList.size() == 4

def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ] //определяем ассоциативный массив
assert monthMap['March'] == 31
monthMap['April'] = 30 //добавляем элемент в ассоциативный массив
assert monthMap.size() == 4
</source>
Closure (замыкание) — это анонимная функция и объект в одном виде:
<source lang="groovy">
def closureFunction = {a, b ->
println a
println b
}

closureFunction(1, 2)
</source>
return в функции указывать не обязательно — по умолчанию будет возвращено значение последней упомянутой переменной.

Передачу параметров в методы, замыкания или функции можно делать без скобок:
<source lang="groovy">
<source lang="groovy">
closureFunction 1,2
closureFunction 1,2
</source>
</source>
Параметры с установленными значениями:<syntaxhighlight lang="groovy" line="1">
def say(msg = 'Hello', name = 'world') {
"$msg $name!"
}
// We can invoke 3 signatures:
// say(), say(msg), say(msg, name)
assert 'Hello world!' == say()
// Right most parameter with default value is eliminated first.
assert 'Hi world!' == say('Hi')
assert 'Howdy, mrhaki!' == say('Howdy,', 'mrhaki')
</syntaxhighlight>Множественное присваивание переменных:<syntaxhighlight lang="groovy" line="1">
// Assign and declare variables.
def (username, email) = ['mrhaki', 'email@host.com']
// We can assign later than the definition of the variables.
int housenr
String streetname
(streetname, housenr) = ['Old Street', 42]
// We can also use type declerations.
def (String streetName, int houseNumber) = ['Old Street', 42]
// Return value of method can be assigned to multiple variables.
def iAmHere() {
[29.20090, 12.90391]
}
def (coordX, coordY) = iAmHere()
</syntaxhighlight>Запуск нового потока при объявлении с ключевым словом "as":<syntaxhighlight lang="groovy" line="1">
// Use as to treat closure as implementation for
// the Runnable interface:
def t = new Thread({ println 'hello' } as Runnable)
t.start() // Output: hello
</syntaxhighlight>Неизменяемые классы маркируются с помощью аннотации Immutable:
<source lang="groovy">
@Immutable
class ImmutableClass {
String stringVariable
Integer integerVariable
}
def newVariable = new ImmutableClass(stringVariable : "some string", integerVariable : 23)
</source>
'''Traits''' - это интерфейс и его стандартная реализация и состояние в одном месте.<syntaxhighlight lang="groovy" line="1">
trait UserTrait {
abstract String name()
String showName() {
return "Hello, ${name()}!"
}
}
class Employee implements UserTrait {
String name() {
return 'Bob'
}
}
def emp = new Employee() as UserTrait
println emp.name()
println emp.showName()
</syntaxhighlight><syntaxhighlight lang="groovy">
trait Id {
Long id = 0
}
trait Version {
Long version = 1
}
class Person {
String username
}
def person = new Person(username: 'mrhaki')
def domainPerson = person.withTraits Id, Version
assert domainPerson.id == 0
assert domainPerson.version == 1

</syntaxhighlight>
Свой менеджер зависимостей '''[http://docs.groovy-lang.org/latest/html/documentation/grape.html Grape]''' позволяет загружать необходимые библиотеки и файлы из maven репозитариев при вызове из командной строки(файл - testJetty.groovy):<syntaxhighlight lang="groovy">
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.*
import groovy.servlet.*

@Grab(group='org.eclipse.jetty.aggregate', module='jetty-all', version='7.6.15.v20140411')
def startJetty() {
vertx.createHttpServer().requestHandler({ req ->
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Jetty!")
}).listen(8080)
}

println "Starting Jetty, press Ctrl+C to stop."
startJetty()
</syntaxhighlight>


== Примечания ==
== Примечания ==
Строка 287: Строка 123:
|archivedate = 2012-02-13
|archivedate = 2012-02-13
}}
}}
*https://ru.wikibooks.org/wiki/Groovy - Учебник по языку Groovy.
* https://ru.wikibooks.org/wiki/Groovy - Учебник по языку Groovy.
* {{cite web
* {{cite web
|last = Хики
|last = Хики
Строка 416: Строка 252:
}}
}}
* [http://plugins.intellij.net/plugin/?id=1524 Плагин для языка Groovy] для IDE [[IntelliJ IDEA]]
* [http://plugins.intellij.net/plugin/?id=1524 Плагин для языка Groovy] для IDE [[IntelliJ IDEA]]
*[https://groovy-lang.org/releasenotes/groovy-3.0.html Изменения в языке версии 3.0]
* [https://groovy-lang.org/releasenotes/groovy-3.0.html Изменения в языке версии 3.0]


{{Языки программирования}}
{{Языки программирования}}

Текущая версия от 21:04, 18 сентября 2023

Groovy
Изображение логотипа
Класс языка объектно-ориентированный, императивный, сценарный язык, язык функционального программирования, мультипарадигмальный, интерпретируемый, язык JVM, открытое программное обеспечение и свободное программное обеспечение
Появился в 2003
Автор Джеймс Стрэкан[вд]
Разработчик 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
ОС кроссплатформенность
Логотип Викисклада Медиафайлы на Викискладе

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

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

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

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

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

Язык нашёл применение в качестве сценарного для расширения возможностей платформенного программного обеспечения. В частности, генератор отчётов 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[англ.], в итоге через цепочку слияний и поглощений (VMware, Pivotal, EMC) актив перешёл в 2017 году в корпорацию Dell. С 2015 года язык является проектом верхнего уровня фонда Apache.

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

Скриншот Groovy Console

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

// Comment
print("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 groovy
println "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

Примечания

[править | править код]
  1. Release 4.0.24 — 2024.
  2. 1 2 3 4 https://blog.mrhaki.com/2011/10/groovy-goodness-default-groovy-script.html
  3. SOAP UI: Sample Scripts on Groovy.
  4. Список поддерживаемых IDE Архивировано 4 февраля 2008 года. на официальном сайте Groovy Архивировано 2 марта 2014 года.
  5. James Strachan. Groovy — the birth of a new dynamic language for the Java platform Архивировано 5 апреля 2007 года.
  6. Scala as the long term replacement for java/javac? (6 июля 2009). Дата обращения: 7 января 2012. Архивировано 10 февраля 2012 года. «I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy»