Groovy | |
---|---|
| |
Класс языка | язык программирования, объектно-ориентированный язык программирования, императивный язык программирования[d], сценарный язык, язык функционального программирования, мультипарадигмальный язык программирования, интерпретируемый язык программирования и JVM language[d] |
Появился в | 2003 |
Автор | Джеймс Стрэкен |
Разработчик | Java Community Process |
Расширение файлов |
.groovy |
Выпуск | 2.4.8[1] (19 января 2017) |
Система типов | статическая и динамическая |
Испытал влияние | Java, Ruby, Python, Perl, Smalltalk |
Повлиял на | Kotlin, Swift |
Лицензия | Apache License 2.0 |
Сайт | groovy-lang.org |
Groovy — объектно-ориентированный язык программирования, разработанный для платформы Java как дополнение к языку Java с возможностями Python, Ruby и Smalltalk.
Использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java-кодом и библиотеками. Язык может использоваться в любом Java-проекте или как скриптовый язык.
Groovy завершил процесс стандартизации в Java Community Process (JSR 241).
Основные возможности языка, отличающие его от Java: как статическая, так и динамическая типизация; встроенный синтаксис для списков, ассоциативных массивов, массивов и регулярных выражений; перегрузка операций. Замыкания в Groovy появились задолго до Java. На Groovy создан веб-фреймворк Grails, основное применение язык нашёл именно в сочетании с ним.
Первым упоминанием о языке было сообщение в блоге Джеймса Стрэчена (англ. James Strachan)[2] от августа 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 году)[3].
Проект разработки языка и комитет JSR-241 с 2007 года возглавляет Гийом Лафорж (Guillaume Laforge). Компанию G2One, занимавшуюся развитием и коммерциализацией языка и фреймворка Grails, осенью 2008 года приобрела SpringSource[en], в итоге через цепочку слияний и поглощений (VMware, Pivotal, EMC) актив перешёл в 2017 году в корпорацию Dell. С 2015 года язык является проектом верхнего уровня фонда Apache.
Программирование на Groovy поддерживается в основных интегрированных средах разработки программного обеспечения[4], в частности:
Последние версии генератора отчётов iReport, основанного на Java-библиотеке JasperReports, позволяют встраивать в отчёты выражения на Groovy и писать на нём дополнительную логику.
Система непрерывной интеграции Jenkins позволяет использовать сценарии автоматизации, созданные на Groovy.
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()
}
}
Ещё пример, демонстрирующий возможности синтаксиса Groovy. Следующий простой Groovy-скрипт может быть прямо в этом виде исполнен:
["Rod", "Carlos", "Chris"].each{println it}
Элементы списка (выглядит, как массив, но это список) будут напечатаны.
В отличие от Java, в 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
Groovy неявно генерирует методы для доступа к переменным (setColor(String color) и getColor()):
class AGroovyBean {
String color
}
def myGroovyBean = new AGroovyBean()
myGroovyBean.setColor('blue')
assert myGroovyBean.getColor() == 'blue'
myGroovyBean.color = 'green'
assert myGroovyBean.color == 'green'
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
Closure (замыкание) — это анонимная функция и объект в одном виде:
def closureFunction = {a, b ->
println a
println b
}
closureFunction(1, 2)
return в функции указывать не обязательно — по умолчанию будет возвращено значение последней упомянутой переменной.
Неизменяемые классы маркируются с помощью аннотации Immutable:
@Immutable
class ImmutableClass {
String stringVariable
Integer integerVariable
}
def newVariable = new ImmutableClass(stringVariable : "some string", integerVariable : 23)
Портал «Свободное программное обеспечение» | |
Groovy в Викиучебнике | |
Лицензия Groovy в Викитеке |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .