Groovy: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Moriline (обсуждение | вклад) |
м →Преамбула: исправление |
||
(не показаны 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]]). |
||
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| |
Первым упоминанием о языке было сообщение в блоге {{Не переведено 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>. |
|||
Проект разработки языка и комитет 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 с рядом значительных улучшений.
Примеры
[править | править код]Классический пример вывода на печать строки с приветствием:
// 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
Примечания
[править | править код]- ↑ Release 4.0.24 — 2024.
- ↑ 1 2 3 4 https://blog.mrhaki.com/2011/10/groovy-goodness-default-groovy-script.html
- ↑ SOAP UI: Sample Scripts on Groovy .
- ↑ Список поддерживаемых IDE Архивировано 4 февраля 2008 года. на официальном сайте Groovy Архивировано 2 марта 2014 года.
- ↑ James Strachan. Groovy — the birth of a new dynamic language for the Java platform Архивировано 5 апреля 2007 года.
- ↑ 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»
Ссылки
[править | править код]- Home (англ.). — домашняя страница проекта. Дата обращения: 5 июня 2006. Архивировано 13 февраля 2012 года.
- JSR 241: The Groovy Programming Language (англ.). JSRs: Java Specification Requests. — домашняя страница проекта. Дата обращения: 5 июня 2006. Архивировано 13 февраля 2012 года.
- https://ru.wikibooks.org/wiki/Groovy - Учебник по языку Groovy.
- Хики, Скотт. Groovy на практике: сокращение кода с помощью Groovy (19 сентября 2006). Дата обращения: 26 ноября 2006. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Развитие Groovy (1 ноября 2007). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Разметка с помощью Groovy Builders (12 октября 2007). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Функциональное программирование с помощью использованием замыканий и карринга (9 января 2008). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Подмешайте немного Groovy в приложения Java (14 февраля 2008). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Ускорение модульного тестирования кода Java с помощью Groovy (25 декабря 2007). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Написание сценариев Ant с помощью Groovy (21 января 2008). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Программирование JDBC с помощью Groovy (12 декабря 2007). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Вперед, на сервер, с Groovy (30 января 2008). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Чэд, Медоуз. Углубитесь в Hierarchical Inherited Rule-Interpreted XML (30 августа 2007). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. MOP и мини-языки (6 февраля 2008). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Эндрю, Гловер. Хитрые операторы (4 сентября 2008). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Groovy for the Office (англ.). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Groovy Zone - DZone Groovy news aggregator (англ.). Дата обращения: 7 сентября 2008. Архивировано 13 февраля 2012 года.
- Плагин для языка Groovy для IDE IntelliJ IDEA
- Изменения в языке версии 3.0