Groovy

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

2003

Автор:

Джеймс Стрэчен

Выпуск:

2.4.7[1] (16 июля 2016)

Система типов:

статическая и динамическая

Испытал влияние:

Java, Ruby, Python, Perl, Smalltalk

Повлиял на:

Kotlin, Swift

Сайт:

[groovy-lang.org/ lang.org]

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

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

Groovy завершил процесс стандартизации в Java Community Process [www.jcp.org/en/jsr/detail?id=241 JSR 241].

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





История

Первым упоминанием о языке Groovy было сообщение в блоге Джеймса Стрэчена (англ. James Strachan (programmer))[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).

Поддержка IDE

Программирование на Groovy поддерживается в основных интегрированных средах разработки программного обеспечения[4], в частности:

  • IntelliJ IDEA начиная с версии 7 или для более ранних версий с использованием JetGroovy Plugin;
  • Eclipse с использованием Groovy Eclipse;
  • Netbeans — встроен в NetBeans IDE.

Использование Groovy

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

Система непрерывной интеграции Hudson позволяет использовать сценарии автоматизации, созданные на 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}

Элементы списка (выглядит, как массив, но это список) будут напечатаны.

Особенности работы

[groovy-lang.org/documentation.html#gettingstarted Установка Groovy]

[groovy.codehaus.org/Groovlets Groovlets] — возможность запускать скрипты на Groovy как сервлеты.

[groovy.codehaus.org/Groovy+Beans GroovyBeans] — версия Groovy для JavaBeans.

В отличие от 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"

Примечания

  1. [www.groovy-lang.org/changelogs/changelog-2.4.7.html Jira Changelog Groovy 2.4.7]
  2. [radio.weblogs.com/0112098/2003/08/29.html James Strachan. Groovy — the birth of a new dynamic language for the Java platform]
  3. [macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html Scala as the long term replacement for java/javac?] (July 6, 2009). Проверено 7 января 2012. [www.webcitation.org/65LY4r0wg Архивировано из первоисточника 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»
  4. [groovy.codehaus.org/IDE+Support Список поддерживаемых IDE] на [groovy.codehaus.org официальном сайте Groovy]

Ссылки

  • [groovy.codehaus.org/ Home] (англ.). — домашняя страница проекта. Проверено 5 июня 2006. [www.webcitation.org/65Qmg4eQj Архивировано из первоисточника 14 февраля 2012].
  • [www.jcp.org/en/jsr/detail?id=241 JSR 241: The Groovy Programming Language] (англ.). JSRs: Java Specification Requests. — домашняя страница проекта. Проверено 5 июня 2006. [www.webcitation.org/65QrH8i5y Архивировано из первоисточника 14 февраля 2012].
  • Хики, Скотт [www-128.ibm.com/developerworks/ru/library/j-pg09196/index.html Groovy на практике: сокращение кода с помощью Groovy] (19 сентября 2006). Проверено 26 ноября 2006. [www.webcitation.org/65QrJJcgH Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg07195/ Развитие Groovy] (рус.) (01 ноября 2007). Проверено 7 сентября 2008. [www.webcitation.org/65QrK99vm Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg04125/ Разметка с помощью Groovy Builders] (рус.) (12 октября 2007). Проверено 7 сентября 2008. [www.webcitation.org/65QrKhwX1 Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg08235/ Функциональное программирование с помощью использованием замыканий и карринга] (рус.) (09 января 2008). Проверено 7 сентября 2008. [www.webcitation.org/65QrLIdQQ Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg05245/ Подмешайте немного Groovy в приложения Java] (рус.) (14 февраля 2008). Проверено 7 сентября 2008. [www.webcitation.org/65QrLqV5R Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg11094/ Ускорение модульного тестирования кода Java с помощью Groovy] (рус.) (25 декабря 2007). Проверено 7 сентября 2008. [www.webcitation.org/65QrMfTl1 Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg12144/j-pg12144.html Написание сценариев Ant с помощью Groovy] (рус.) (21 января 2008). Проверено 7 сентября 2008. [www.webcitation.org/65QrNGeY5 Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg01115/ Программирование JDBC с помощью Groovy] (рус.) (12 декабря 2007). Проверено 7 сентября 2008. [www.webcitation.org/65QrNoPC4 Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg03155/ Вперед, на сервер, с Groovy] (рус.) (30 января 2008). Проверено 7 сентября 2008. [www.webcitation.org/65QrOOtLQ Архивировано из первоисточника 14 февраля 2012].
  • Чэд, Медоуз [www.ibm.com/developerworks/ru/library/x-hirix1/ Углубитесь в Hierarchical Inherited Rule-Interpreted XML] (рус.) (30 августа 2007). Проверено 7 сентября 2008. [www.webcitation.org/65QrP1p4Z Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg09205/ MOP и мини-языки] (рус.) (06 февраля 2008). Проверено 7 сентября 2008. [www.webcitation.org/65QrPp9ZP Архивировано из первоисточника 14 февраля 2012].
  • Эндрю, Гловер [www.ibm.com/developerworks/ru/library/j-pg10255/index.html Хитрые операторы] (рус.) (04 сентября 2008). Проверено 7 сентября 2008. [www.webcitation.org/65QrQNC9Y Архивировано из первоисточника 14 февраля 2012].
  • [www-128.ibm.com/developerworks/java/library/j-alj08034.html An introduction to Groovy] (англ.). Проверено 7 сентября 2008. [www.webcitation.org/65QrQuysD Архивировано из первоисточника 14 февраля 2012].
  • [dmoz.org/Computers/Programming/Languages/Java/Extensions/Groovy/ Open Directory: Java: Extensions: Groovy] (англ.). Проверено 7 сентября 2008. [www.webcitation.org/65QrRYx4x Архивировано из первоисточника 14 февраля 2012].
  • [groovy.codehaus.org/Groovy+for+the+Office Groovy for the Office] (англ.). Проверено 7 сентября 2008. [www.webcitation.org/65QrS3UpV Архивировано из первоисточника 14 февраля 2012].
  • [groovy.dzone.com/ Groovy Zone - DZone Groovy news aggregator] (англ.). Проверено 7 сентября 2008. [www.webcitation.org/65QrSkqK7 Архивировано из первоисточника 14 февраля 2012].
  • [plugins.intellij.net/plugin/?id=1524 Плагин для языка Groovy] для IDE IntelliJ IDEA


К:Википедия:Статьи без источников (тип: не указан)

Отрывок, характеризующий Groovy

– Этого я не могу рассудить, – холодно сказал князь Андрей, а подумал: «еду для того, чтобы спасти армию».
– Mon cher, vous etes un heros, [Мой дорогой, вы – герой,] – сказал Билибин.


В ту же ночь, откланявшись военному министру, Болконский ехал в армию, сам не зная, где он найдет ее, и опасаясь по дороге к Кремсу быть перехваченным французами.
В Брюнне всё придворное население укладывалось, и уже отправлялись тяжести в Ольмюц. Около Эцельсдорфа князь Андрей выехал на дорогу, по которой с величайшею поспешностью и в величайшем беспорядке двигалась русская армия. Дорога была так запружена повозками, что невозможно было ехать в экипаже. Взяв у казачьего начальника лошадь и казака, князь Андрей, голодный и усталый, обгоняя обозы, ехал отыскивать главнокомандующего и свою повозку. Самые зловещие слухи о положении армии доходили до него дорогой, и вид беспорядочно бегущей армии подтверждал эти слухи.
«Cette armee russe que l'or de l'Angleterre a transportee, des extremites de l'univers, nous allons lui faire eprouver le meme sort (le sort de l'armee d'Ulm)», [«Эта русская армия, которую английское золото перенесло сюда с конца света, испытает ту же участь (участь ульмской армии)».] вспоминал он слова приказа Бонапарта своей армии перед началом кампании, и слова эти одинаково возбуждали в нем удивление к гениальному герою, чувство оскорбленной гордости и надежду славы. «А ежели ничего не остается, кроме как умереть? думал он. Что же, коли нужно! Я сделаю это не хуже других».
Князь Андрей с презрением смотрел на эти бесконечные, мешавшиеся команды, повозки, парки, артиллерию и опять повозки, повозки и повозки всех возможных видов, обгонявшие одна другую и в три, в четыре ряда запружавшие грязную дорогу. Со всех сторон, назади и впереди, покуда хватал слух, слышались звуки колес, громыхание кузовов, телег и лафетов, лошадиный топот, удары кнутом, крики понуканий, ругательства солдат, денщиков и офицеров. По краям дороги видны были беспрестанно то павшие ободранные и неободранные лошади, то сломанные повозки, у которых, дожидаясь чего то, сидели одинокие солдаты, то отделившиеся от команд солдаты, которые толпами направлялись в соседние деревни или тащили из деревень кур, баранов, сено или мешки, чем то наполненные.
На спусках и подъемах толпы делались гуще, и стоял непрерывный стон криков. Солдаты, утопая по колена в грязи, на руках подхватывали орудия и фуры; бились кнуты, скользили копыта, лопались постромки и надрывались криками груди. Офицеры, заведывавшие движением, то вперед, то назад проезжали между обозами. Голоса их были слабо слышны посреди общего гула, и по лицам их видно было, что они отчаивались в возможности остановить этот беспорядок. «Voila le cher [„Вот дорогое] православное воинство“, подумал Болконский, вспоминая слова Билибина.
Желая спросить у кого нибудь из этих людей, где главнокомандующий, он подъехал к обозу. Прямо против него ехал странный, в одну лошадь, экипаж, видимо, устроенный домашними солдатскими средствами, представлявший середину между телегой, кабриолетом и коляской. В экипаже правил солдат и сидела под кожаным верхом за фартуком женщина, вся обвязанная платками. Князь Андрей подъехал и уже обратился с вопросом к солдату, когда его внимание обратили отчаянные крики женщины, сидевшей в кибиточке. Офицер, заведывавший обозом, бил солдата, сидевшего кучером в этой колясочке, за то, что он хотел объехать других, и плеть попадала по фартуку экипажа. Женщина пронзительно кричала. Увидав князя Андрея, она высунулась из под фартука и, махая худыми руками, выскочившими из под коврового платка, кричала:
– Адъютант! Господин адъютант!… Ради Бога… защитите… Что ж это будет?… Я лекарская жена 7 го егерского… не пускают; мы отстали, своих потеряли…
– В лепешку расшибу, заворачивай! – кричал озлобленный офицер на солдата, – заворачивай назад со шлюхой своею.
– Господин адъютант, защитите. Что ж это? – кричала лекарша.
– Извольте пропустить эту повозку. Разве вы не видите, что это женщина? – сказал князь Андрей, подъезжая к офицеру.
Офицер взглянул на него и, не отвечая, поворотился опять к солдату: – Я те объеду… Назад!…
– Пропустите, я вам говорю, – опять повторил, поджимая губы, князь Андрей.
– А ты кто такой? – вдруг с пьяным бешенством обратился к нему офицер. – Ты кто такой? Ты (он особенно упирал на ты ) начальник, что ль? Здесь я начальник, а не ты. Ты, назад, – повторил он, – в лепешку расшибу.
Это выражение, видимо, понравилось офицеру.
– Важно отбрил адъютантика, – послышался голос сзади.
Князь Андрей видел, что офицер находился в том пьяном припадке беспричинного бешенства, в котором люди не помнят, что говорят. Он видел, что его заступничество за лекарскую жену в кибиточке исполнено того, чего он боялся больше всего в мире, того, что называется ridicule [смешное], но инстинкт его говорил другое. Не успел офицер договорить последних слов, как князь Андрей с изуродованным от бешенства лицом подъехал к нему и поднял нагайку:
– Из воль те про пус тить!
Офицер махнул рукой и торопливо отъехал прочь.
– Всё от этих, от штабных, беспорядок весь, – проворчал он. – Делайте ж, как знаете.
Князь Андрей торопливо, не поднимая глаз, отъехал от лекарской жены, называвшей его спасителем, и, с отвращением вспоминая мельчайшие подробности этой унизи тельной сцены, поскакал дальше к той деревне, где, как ему сказали, находился главнокомандующий.
Въехав в деревню, он слез с лошади и пошел к первому дому с намерением отдохнуть хоть на минуту, съесть что нибудь и привесть в ясность все эти оскорбительные, мучившие его мысли. «Это толпа мерзавцев, а не войско», думал он, подходя к окну первого дома, когда знакомый ему голос назвал его по имени.
Он оглянулся. Из маленького окна высовывалось красивое лицо Несвицкого. Несвицкий, пережевывая что то сочным ртом и махая руками, звал его к себе.
– Болконский, Болконский! Не слышишь, что ли? Иди скорее, – кричал он.
Войдя в дом, князь Андрей увидал Несвицкого и еще другого адъютанта, закусывавших что то. Они поспешно обратились к Болконскому с вопросом, не знает ли он чего нового. На их столь знакомых ему лицах князь Андрей прочел выражение тревоги и беспокойства. Выражение это особенно заметно было на всегда смеющемся лице Несвицкого.
– Где главнокомандующий? – спросил Болконский.
– Здесь, в том доме, – отвечал адъютант.
– Ну, что ж, правда, что мир и капитуляция? – спрашивал Несвицкий.
– Я у вас спрашиваю. Я ничего не знаю, кроме того, что я насилу добрался до вас.
– А у нас, брат, что! Ужас! Винюсь, брат, над Маком смеялись, а самим еще хуже приходится, – сказал Несвицкий. – Да садись же, поешь чего нибудь.
– Теперь, князь, ни повозок, ничего не найдете, и ваш Петр Бог его знает где, – сказал другой адъютант.
– Где ж главная квартира?
– В Цнайме ночуем.
– А я так перевьючил себе всё, что мне нужно, на двух лошадей, – сказал Несвицкий, – и вьюки отличные мне сделали. Хоть через Богемские горы удирать. Плохо, брат. Да что ты, верно нездоров, что так вздрагиваешь? – спросил Несвицкий, заметив, как князя Андрея дернуло, будто от прикосновения к лейденской банке.
– Ничего, – отвечал князь Андрей.
Он вспомнил в эту минуту о недавнем столкновении с лекарскою женой и фурштатским офицером.
– Что главнокомандующий здесь делает? – спросил он.
– Ничего не понимаю, – сказал Несвицкий.
– Я одно понимаю, что всё мерзко, мерзко и мерзко, – сказал князь Андрей и пошел в дом, где стоял главнокомандующий.
Пройдя мимо экипажа Кутузова, верховых замученных лошадей свиты и казаков, громко говоривших между собою, князь Андрей вошел в сени. Сам Кутузов, как сказали князю Андрею, находился в избе с князем Багратионом и Вейротером. Вейротер был австрийский генерал, заменивший убитого Шмита. В сенях маленький Козловский сидел на корточках перед писарем. Писарь на перевернутой кадушке, заворотив обшлага мундира, поспешно писал. Лицо Козловского было измученное – он, видно, тоже не спал ночь. Он взглянул на князя Андрея и даже не кивнул ему головой.
– Вторая линия… Написал? – продолжал он, диктуя писарю, – Киевский гренадерский, Подольский…
– Не поспеешь, ваше высокоблагородие, – отвечал писарь непочтительно и сердито, оглядываясь на Козловского.
Из за двери слышен был в это время оживленно недовольный голос Кутузова, перебиваемый другим, незнакомым голосом. По звуку этих голосов, по невниманию, с которым взглянул на него Козловский, по непочтительности измученного писаря, по тому, что писарь и Козловский сидели так близко от главнокомандующего на полу около кадушки,и по тому, что казаки, державшие лошадей, смеялись громко под окном дома, – по всему этому князь Андрей чувствовал, что должно было случиться что нибудь важное и несчастливое.
Князь Андрей настоятельно обратился к Козловскому с вопросами.
– Сейчас, князь, – сказал Козловский. – Диспозиция Багратиону.
– А капитуляция?
– Никакой нет; сделаны распоряжения к сражению.
Князь Андрей направился к двери, из за которой слышны были голоса. Но в то время, как он хотел отворить дверь, голоса в комнате замолкли, дверь сама отворилась, и Кутузов, с своим орлиным носом на пухлом лице, показался на пороге.
Князь Андрей стоял прямо против Кутузова; но по выражению единственного зрячего глаза главнокомандующего видно было, что мысль и забота так сильно занимали его, что как будто застилали ему зрение. Он прямо смотрел на лицо своего адъютанта и не узнавал его.