Из Википедии, бесплатной энциклопедии
  (Перенаправлено с Groovy (язык программирования) )
Перейти к навигации Перейти к поиску

Apache Groovy - это Java -совместимый с синтаксисом объектно-ориентированный язык программирования для платформы Java . Это как статический, так и динамический язык с функциями, аналогичными функциям Python , Ruby и Smalltalk . Он может быть использован и как язык программирования и язык сценариев для платформы Java, компилируется в Java виртуальной машины (JVM) байткод и Взаимодействует бесшовно с другим кодом и Java библиотеки . Groovy использует синтаксис фигурных скобок.похож на Java. Groovy поддерживает замыкания , многострочные строки и выражения, встроенные в строки . Большая часть возможностей Groovy заключается в его преобразованиях AST , запускаемых с помощью аннотаций.

Groovy 1.0 был выпущен 2 января 2007 года, а Groovy 2.0 - в июле 2012 года. Начиная с версии 2, Groovy можно компилировать статически , обеспечивая вывод типов и производительность, близкую к производительности Java. [3] [4] Groovy 2.4 был последним крупным выпуском, спонсируемым Pivotal Software и завершившимся в марте 2015 года. [5] Groovy с тех пор изменил свою структуру управления на Комитет по управлению проектами в Apache Software Foundation . [6]

История [ править ]

Джеймс Страчан впервые рассказал о разработке Groovy в своем блоге в августе 2003 года. [7] В марте 2004 года Groovy был представлен в JCP как JSR 241 [8] и принят голосованием. В период с 2004 по 2006 год было выпущено несколько версий. После того, как началась работа по стандартизации Java Community Process (JCP), нумерация версий изменилась, и 2 января 2007 года была выпущена версия под названием «1.0». После того, как различные бета-версии и кандидаты на выпуск получили номера 1.1, 7 декабря 2007 г. был выпущен Groovy 1.1 Final и сразу же переименован в Groovy 1.5, чтобы отразить многие внесенные изменения.

В 2007 году Groovy получил первый приз на конкурсе JAX 2007 за инновации. [9] В 2008 году Grails , веб-фреймворк для Groovy , получил вторую премию на конкурсе JAX 2008 за инновации. [10]

В ноябре 2008 года SpringSource приобрела компанию Groovy and Grails (G2One). [11] В августе 2009 года VMware приобрела SpringSource. [12]

В апреле 2012 года, после восьми лет бездействия, руководитель специализации изменил статус JSR 241 на бездействующий. [8]

Страчан покинул проект молча за год до Groovy версии 1.0 в 2007 году [ править ] В октябре 2016, заявил Страчан «Я до сих пор любовь заводной (Jenkins трубопроводы настолько заводной!), Java, идти, машинопись и Котлин». [13]

2 июля 2012 г. был выпущен Groovy 2.0, в который, помимо других новых функций, добавлены статическая компиляция и проверка статического типа .

Когда в апреле 2013 года совместное предприятие Pivotal Software было выделено корпорацией EMC (EMC) и VMware, Groovy и Grails вошли в его портфель продуктов. Pivotal прекратил спонсировать Groovy и Grails с апреля 2015 года. [5] В том же месяце Groovy изменил свою структуру управления с репозитория Codehaus на Комитет управления проектами (PMC) в Apache Software Foundation через свой инкубатор. [6] Groovy закончил инкубатор Apache и стал проектом высшего уровня в ноябре 2015 года. [14]

Особенности [ править ]

Наиболее допустимые файлы Java также являются допустимыми файлами Groovy. Хотя эти два языка похожи, код Groovy может быть более компактным, поскольку ему не нужны все элементы, необходимые Java. [15] Это позволяет Java-программистам постепенно изучать Groovy, начиная со знакомого синтаксиса Java, прежде чем усвоить больше идиом программирования Groovy . [16]

Функции Groovy, недоступные в Java, включают статическую и динамическую типизацию (с ключевым словом def), перегрузку операторов , собственный синтаксис для списков и ассоциативных массивов (карт), встроенную поддержку регулярных выражений , полиморфную итерацию, интерполяцию строк , добавленные вспомогательные методы и безопасный оператор навигации ?. для автоматической проверки нулевых указателей (например variable?.method(), или variable?.field). [17]

Начиная с версии 2, Groovy также поддерживает модульность (возможность поставлять только необходимые jar-файлы в соответствии с потребностями проекта, таким образом уменьшая размер библиотеки Groovy), проверку типов, статическую компиляцию, улучшения синтаксиса Project Coin, блоки множественной выборки и постоянное повышение производительности с использованием invokedynamicинструкция введена в Java 7 . [18]

Groovy обеспечивает встроенную поддержку различных языков разметки, таких как XML и HTML , с помощью синтаксиса встроенной объектной модели документа (DOM). Эта функция позволяет определять и управлять многими типами разнородных активов данных с помощью единообразного и краткого синтаксиса и методологии программирования. [ необходима цитата ]

В отличие от Java, файл исходного кода Groovy может быть выполнен как (некомпилированный) скрипт , если он содержит код вне какого-либо определения класса, если это класс с основным методом или если это Runnable или GroovyTestCase . Сценарий Groovy полностью анализируется, компилируется и генерируется перед выполнением (аналогично Python и Ruby). Это происходит под капотом, и скомпилированная версия не сохраняется как артефакт процесса. [19]

GroovyBeans, свойства [ править ]

GroovyBeans - это версия JavaBeans для Groovy . Groovy неявно генерирует геттеры и сеттеры. В следующем коде, setColor(String color)и getColor()неявно генерируются. Последние две строки, которые, похоже, обращаются к цвету напрямую, на самом деле вызывают неявно сгенерированные методы. [20]

class  AGroovyBean  {  цвет строки  }def  myGroovyBean  =  новый  AGroovyBean ()myGroovyBean . setColor ( 'baby blue' ) утверждает  myGroovyBean . getColor ()  ==  'голубой'myGroovyBean . color  =  ' pewter ' утверждает  myGroovyBean . цвет  ==  'оловянный'

Groovy предлагает простой и последовательный синтаксис для работы со списками и картами , напоминающий синтаксис массивов Java . [21]

def  movieList  =  [ ' Dersu Uzala ' ,  'Ran' ,  'Seven Samurai' ]  // Выглядит как массив, но представляет собой список assert  movieList [ 2 ]  ==  'Seven Samurai' movieList [ 3 ]  =  'Casablanca'  // Добавляет элемент в список assert  movieList . размер ()  ==  4def  monthMap  =  [  'Январь'  :  31 ,  'Февраль'  :  28 ,  'Март'  :  31  ]  // Объявляет карту assert  monthMap [ 'March' ]  ==  31  // Доступ к записи monthMap [ 'April' ]  =  30  // Добавляет запись на карту assert  monthMap . размер ()  ==  4

Расширение прототипа [ править ]

Groovy предлагает поддержку расширения прототипа с помощью ExpandoMetaClassмодулей расширения (только в Groovy 2), категорий, подобных Objective-C и DelegatingMetaClass. [22]

ExpandoMetaClassпредлагает предметно-ориентированный язык (DSL) для легкого выражения изменений в классе, аналогично концепции открытого класса Ruby :

Номер . metaClass  {  sqrt  =  {  Math . sqrt ( делегат )  } }утверждать  9 . sqrt ()  ==  3 утверждение  4 . sqrt ()  ==  2

Изменения кода Groovy в процессе создания прототипов не видны в Java, поскольку каждый вызов атрибута / метода в Groovy проходит через реестр метаклассов. Доступ к измененному коду можно получить только из Java, перейдя в реестр метакласса.

Groovy также позволяет переопределять методы getProperty(), propertyMissing()в частности, позволяя разработчику перехватывать вызовы объекта и указывать для них действие упрощенным аспектно-ориентированным способом. Следующий код позволяет классу java.lang.Stringреагировать на hexсвойство:

enum  Color  {  ЧЕРНЫЙ ( '# 000000' ),  БЕЛЫЙ ( '#FFFFFF' ),  КРАСНЫЙ ( '# FF0000' ),  СИНИЙ ( '# 0000FF' )  Шестнадцатеричная строка  Цвет ( шестнадцатеричная строка ) { this . шестнадцатеричный = шестнадцатеричный } }       Строка . метакласс . getProperty  =  {  свойство String  -> def stringColor = делегировать if ( property == 'hex' ) { Color . значения (). найди { это . имя (). equalsIgnoreCase stringColor } ?. шестнадцатеричный } }                утверждают  "БЕЛЫЙ" . hex  ==  "#FFFFFF" утверждать  "СИНИЙ" . hex  ==  "# 0000FF" утверждать  "ЧЕРНЫЙ" . hex  ==  "# 000000" утверждать  "ЗЕЛЕНЫЙ" . шестнадцатеричный  ==  ноль

Фреймворк Grails широко использует метапрограммирование, чтобы активировать средства динамического поиска GORM , подобные User.findByName('Josh')и другие. [23]

Точка и круглые скобки [ править ]

Синтаксис Groovy позволяет в некоторых ситуациях опускать скобки и точки. Следующий отличный код

возьми ( кофе ). с ( сахар ,  молоко ). и ( ликер )

можно записать как

взять  кофе  с  сахаром ,  молоком  и  ликером

возможность разработки предметно-ориентированных языков (DSL), которые выглядят как простой английский.

Функциональное программирование [ править ]

Хотя Groovy в основном является объектно-ориентированным языком, он также предлагает функции функционального программирования .

Закрытия [ править ]

Согласно документации Groovy: «Замыкания в Groovy работают аналогично« указателю на метод », позволяя писать и запускать код в более поздний момент времени». [24] Замыкания Groovy поддерживают свободные переменные, т. Е. Переменные, которые не были явно переданы ему в качестве параметра, но существуют в его контексте объявления, частичном приложении (которое он называет « каррирование » [25] ), делегировании, неявном, типизированном и нетипизированные параметры.

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

list  =  [ 1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9 ]/ * * Ненулевые числа приводятся к истине, поэтому, когда оно% 2 == 0 (даже), оно ложно. * Тип неявного параметра "it" может быть определен средой IDE как целое число. * Его можно также записать как: * list.findAll {Целое число i -> i% 2} * list.findAll {i -> i% 2} * / def  odds  =  list . findAll  {  это  %  2  }утверждать  шансы  ==  [ 1 ,  3 ,  5 ,  7 ,  9 ]

Группа выражений может быть записана в закрывающем блоке без ссылки на реализацию, а отвечающий объект может быть назначен позже с помощью делегирования:

// Этот блок кода содержит выражения без ссылки на реализацию def  operations  =  {  объявление  5  сумма  4  деление  3  печать }
/ * * Этот класс будет обрабатывать операции, которые можно использовать в приведенном выше закрытии. Другой класс * может быть объявлен с теми же методами, но с использованием, например, операций веб-сервиса * в вычислениях. * / class  Expression  {  BigDecimal  значение / *  * Хотя в качестве параметра передается целое число, оно преобразуется в BigDecimal, как  * было определено. Если бы у класса был метод declare (Integer value), он бы использовался вместо него.  * /  def  declare ( BigDecimal  значение )  {  это . значение  =  значение  }  def  sum ( BigDecimal  valueToAdd )  {  это . значение  + =  valueToAdd  }  def  div ( BigDecimal  делитель )  {  this . значение  / =  делитель  }  Защиту  propertyMissing ( строка  свойство )  {  если  ( свойство  ==  "печать" )  Println  значение  } }
// Здесь определяется, кто будет отвечать на выражения в блоке кода выше. операции . делегат  =  новое  выражение () операции ()

Карри [ править ]

Обычно называется частичное применение , [25] эта функция Groovy позволяет установить параметры для закупорки быть установлены параметром по умолчанию в любом из своих аргументов, создавая новое замыкание с связанным значением. Подача одного аргумента curry()методу исправит первый аргумент. Подача N аргументов исправит аргументы 1 .. N.

def  joinTwoWordsWithSymbol  =  {  символ ,  первый ,  второй  ->  первый  +  символ  +  второй  } assert  joinTwoWordsWithSymbol ( '#' ,  'Hello' ,  'World' )  ==  'Hello # World'def  concatWords  =  joinTwoWordsWithSymbol . curry ( '' ) assert  concatWords ( 'Hello' ,  'World' )  ==  'Hello World'def  prependHello  =  concatWords . curry ( 'Hello' ) // def prependHello = joinTwoWordsWithSymbol.curry ('', 'Hello') assert  prependHello ( 'World' )  ==  'Hello World'

Карри также можно использовать в обратном направлении (фиксируя последние N аргументов), используя rcurry().

def  power  =  {  BigDecimal  значение ,  BigDecimal  power  ->  value ** power }def  квадрат  =  мощность . rcurry ( 2 ) def  cube  =  мощность . ркарри ( 3 )assert  power ( 2 ,  2 )  ==  4 assert  square ( 4 )  ==  16 assert  cube ( 3 )  ==  27

Превосходные также поддерживает ленивые вычисления , [26] [27] уменьшить / раз , [28] бесконечные структур и неизменность , [29] среди других. [30]

Обработка JSON и XML [ править ]

В нотации объектов JavaScript ( JSON ) и обработке XML Groovy использует шаблон Builder , что делает создание структуры данных менее подробным. Например, следующий XML:

<languages>  <language  year = "1995" >  <name> Java </name>  <paradigm> объектно-ориентированный </paradigm>  <typing> статический </typing>  </language>  <language  year = "1995" >  <name > Ruby </name>  <paradigm> функциональный, объектно-ориентированный </paradigm>  <typing> утиная типизация, динамический </typing>  </language>  <language  year = "2003" >  <name> Groovy </ name>  <paradigm> функциональный, объектно-ориентированный </paradigm> <typing> утиная печать, динамическая, статическая </typing>  </language> </languages>

можно сгенерировать с помощью следующего кода Groovy:

def  writer  =  new  StringWriter () def  builder  =  new  groovy . xml . MarkupBuilder ( писатель ) строитель . languages  {  язык ( год:  1995 )  {  название  "Java"  парадигма  "объектно-ориентированная"  типизация  "статический"  }  язык  ( год:  1995 )  {  название  "Ruby"  парадигма  "функциональная, объектно-ориентированная"  типизация "утиная типизация, динамический"  }  язык  ( год:  2003 )  {  название  "Groovy"  парадигма  "функциональная, объектно-ориентированная"  типизация  "утиная типизация, динамическая, статическая"  } }

а также может обрабатываться в потоковом режиме StreamingMarkupBuilder. Чтобы изменить реализацию на JSON, его MarkupBuilderможно заменить на JsonBuilder. [31]

Для его анализа и поиска функционального языка findAllможет служить метод Groovy :

def  languages  =  новый  XmlSlurper (). parseText  писатель . toString ()// Здесь используется синтаксис регулярных выражений Groovy для сопоставления (= ~), который будет приведен к // логическому значению: либо true, если значение содержит нашу строку, либо false в противном случае. def  function  =  languages . язык . findAll  {  это . paradigm  = ~  "функционал"  } утверждать  функционал . собери  {  это . name  }  ==  [ "Groovy" ,  "Ruby" ]

Строковая интерполяция [ править ]

В Groovy строки можно интерполировать с помощью переменных и выражений с помощью GStrings: [32]

BigDecimal  account  =  10.0 def  text  =  "В аккаунте в настоящее время отображается баланс $ account" assert  text  ==  "В аккаунте в настоящее время отображается баланс 10.0"

Строки GString, содержащие переменные и выражения, должны быть объявлены с использованием двойных кавычек.

Сложное выражение необходимо заключать в фигурные скобки. Это предотвращает интерпретацию его частей как принадлежащих к окружающей строке, а не к выражению:

BigDecimal  minus  =  4.0 text  =  "В аккаунте в настоящее время отображается баланс в размере $ {account - minus}" assert  text  ==  "В аккаунте в настоящее время отображается баланс 6.0"// Без скобок для выделения выражения это приведет к следующему: text  =  "В аккаунте в настоящее время отображается баланс $ account - минус" assert  text  ==  "В аккаунте в настоящее время отображается баланс 10,0 - минус"

Вычисление выражения можно отложить, используя синтаксис стрелки:

BigDecimal  tax  =  0,15 text  =  "В аккаунте в настоящее время отображается баланс $ {-> account - account * tax}" tax  =  0,10// Значение налога было изменено ПОСЛЕ объявления GString. Выражение // переменные связываются только тогда, когда выражение действительно должно быть вычислено: assert  text  ==  "В настоящее время на счете отображается баланс 9.000"

Преобразование абстрактного синтаксического дерева [ править ]

Согласно собственной документации Groovy: «Когда компилятор Groovy компилирует скрипты и классы Groovy, в какой-то момент процесса исходный код будет представлен в памяти в виде конкретного синтаксического дерева, а затем преобразован в абстрактное синтаксическое дерево. . Цель преобразований AST - позволить разработчикам подключиться к процессу компиляции, чтобы иметь возможность изменять AST до того, как он будет преобразован в байт-код, который будет запускаться JVM. Преобразования AST предоставляют Groovy улучшенные возможности метапрограммирования во время компиляции, обеспечивающие высокую гибкость на уровне языка без потери производительности во время выполнения ". [33]

Примеры AST в Groovy:

  • Преобразование категорий и миксинов
  • Неизменяемый макрос AST
  • Newify преобразование
  • Синглтон-преобразование

среди прочего.

Черты характера [ править ]

Согласно документации Groovy, « Traits - это структурная конструкция языка, которая позволяет: составление поведений, реализацию интерфейсов во время выполнения, переопределение поведения и совместимость с проверкой / компиляцией статических типов».

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

trait  FlyingAbility  {  / * объявление трейта * /  String  fly ()  {  "Я лечу!"  }  / * объявление метода внутри трейта * / }

Затем его можно использовать как обычный интерфейс, используя ключевое слово implements:

class  Bird  реализует  FlyingAbility  {}  / * Добавляет черту FlyingAbility к возможностям класса Bird * / def  bird  =  new  Bird ()  / * создает экземпляр новой Bird * / assert  bird . fly ()  ==  "Я лечу!"  / * класс Bird автоматически получает поведение трейта FlyingAbility * /

Черты характера позволяют использовать широкий спектр способностей, от простого сочинения до тестирования.

Принятие [ править ]

Известные примеры внедрения Groovy включают:

  • Adaptavist ScriptRunner включает реализацию Groovy для автоматизации и расширения инструментов Atlassian , используемых более чем 20000 организациями по всему миру. [34] [35]
  • Apache OFBiz , система планирования ресурсов предприятия (ERP) с открытым исходным кодом , использует Groovy. [36] [37]
  • Eucalyptus , система управления облаком, в значительной степени использует Groovy.
  • Gradle - популярный инструмент автоматизации сборки с использованием Groovy.
  • LinkedIn использует Groovy и Grails для некоторых своих подсистем. [38]
  • LogicMonitor, облачная платформа мониторинга, использует Groovy в источниках данных на основе сценариев. [39]
  • Jenkins , платформа для непрерывной интеграции . В версии 2 Jenkins включает плагин Pipeline, который позволяет писать инструкции сборки на Groovy. [40]
  • Liferay использует groovy в своем рабочем процессе kaleo
  • Sky.com использует Groovy и Grails для обслуживания массового онлайнового медиа-контента. [41]
  • SmartThings , открытая платформа для умных домов и потребительского Интернета вещей , использует ориентированное на безопасность подмножество Groovy [42]
  • SoapUI предоставляет Groovy в качестве языка для разработки тестов веб-сервисов. [43]
  • Survata , стартап по исследованию рынка, использует Groovy и Grails. [ необходима цитата ]
  • Европейское патентное ведомство (ЕПВ) разработало язык программирования потоков данных на Groovy, «чтобы использовать сходство в процессах связи с патентным ведомством каждой отдельной страны и преобразовать их в единый универсальный процесс». [ необходима цитата ]
  • Хотя Groovy можно интегрировать в любую среду JVM, инфраструктура JBoss Seam предоставляет Groovy, помимо Java, в качестве языка разработки прямо из коробки. [44]
  • vCalc.com использует Groovy для всей определяемой пользователем математики в своей математической системе краудсорсинга. [45]
  • Wired.com использует Groovy и Grails для отдельного раздела веб-сайта с обзорами продуктов. [46]
  • XWiki SAS использует Groovy в качестве языка сценариев в своем продукте с открытым исходным кодом для совместной работы. [47]

Поддержка IDE [ править ]

Многие интегрированные среды разработки (IDE) и текстовые редакторы поддерживают Groovy:

  • Android Studio , IDE, используемая для создания приложений для Android
  • Редактор атома
  • Eclipse через Groovy-Eclipse
  • Emacs , используя groovy-mode проекта groovy-emacs-mode.
  • IntelliJ IDEA , Community Edition, Grails / Griffon только в Ultimate Edition
  • JDeveloper , для использования с Oracle ADF
  • jEdit , расширенный текстовый редактор для платформы Java
  • Kate , продвинутый текстовый редактор для KDE, поддерживает Groovy и более 200 других форматов файлов.
  • NetBeans , начиная с версии 6.5
  • Notepad ++ , продвинутый текстовый редактор для Microsoft Windows
  • Sublime Text , кроссплатформенный текстовый редактор
  • TextMate
  • Код Visual Studio
  • UltraEdit , редактор программ общего назначения

Диалекты [ править ]

Есть одна альтернативная реализация Groovy:

  • Grooscript преобразует код Groovy в код JavaScript . [48] Хотя Grooscript имеет некоторые ограничения по сравнению с Apache Groovy, он может использовать классы домена как на сервере, так и на клиенте. [49] Предоставляется поддержка плагинов для Grails версии 3.0, а также онлайн-преобразования кода. [50]

См. Также [ править ]

  • Сравнение языков программирования
  • Griffon (framework) - фреймворк рабочего стола
  • Project Zero
  • Спок (среда тестирования)

Ссылки [ править ]

Цитаты [ править ]

  1. ^ a b "Релизы - apache / groovy" . Проверено 10 декабря 2020 г. - через GitHub .
  2. ^ https://mrhaki.blogspot.com/2011/10/groovy-goodness-default-groovy-script.html
  3. ^ «Производительность Groovy 2.0 по сравнению с Java» . 25 августа 2012 г.
  4. ^ «Java против Groovy2.0 против простого теста производительности Scala» . 10 июля 2012. Архивировано из оригинала 10 декабря 2012 года . Проверено 7 октября 2012 года .
  5. ^ a b «Groovy 2.4 и Grails 3.0 станут последними крупными выпусками под основным спонсорством» . 19 янв 2015.
  6. ^ a b «Groovy присоединяется к Apache Incubator» . 11 марта 2015.
  7. Джеймс Страчан (29 августа 2003 г.). «Groovy - рождение нового динамического языка для платформы Java» . Архивировано из оригинала на 1 сентября 2003 года.
  8. ^ a b «Процесс сообщества Java JSR 241» .
  9. ^ «Groovy получает первый приз на конкурсе инноваций JAX 2007» . 2007-04-26. Архивировано из оригинала на 2015-05-13 . Проверено 7 октября 2012 .
  10. ^ «Говорят, за чашкой кофе может случиться многое» . Архивировано из оригинала на 2011-04-19 . Проверено 7 октября 2012 .
  11. ^ «SpringSource приобретает компанию Groovy и Grails (G2One)» . 11 ноября 2008 г.
  12. ^ «VMWare приобретает SpringSource» . 10 августа 2009 г.
  13. ^ "Твит Джеймса Страчана" . 24 ноября 2016 . Проверено 24 ноября 2016 .
  14. ^ "Объявление в списке рассылки разработчиков" .
  15. Перейти ↑ König 2007, pg. 32
  16. ^ "Рекомендации по стилю и языку Groovy для разработчиков Java" . Groovy.codehaus.org. Архивировано из оригинала на 2015-01-17 . Проверено 22 января 2015 .
  17. ^ «Groovy - Отличия от Java» . Groovy.codehaus.org. Архивировано из оригинала на 2009-03-17 . Проверено 12 августа 2013 .
  18. ^ "Что нового в Groovy 2.0?" . 28 июня 2012 г.
  19. ^ König 2007, стр. 37-8
  20. ^ König 2007, стр. 38-9
  21. ^ König 2007, стр. 41-3
  22. ^ "JN3525-MetaClasses" . Архивировано из оригинала на 2012-10-01 . Проверено 7 октября 2012 .
  23. ^ "Методы метапрограммирования в Groovy и Grails" . 11 июня 2009 г.
  24. ^ "Groovy - замыкания" . Архивировано из оригинала на 2012-05-22.
  25. ^ a b «Призывает ли Groovy частичное приложение« каррированием » », 10 августа 2013 г.
  26. ^ "Groovy - ленивое преобразование" . Архивировано из оригинала на 2012-10-08 . Проверено 7 октября 2012 .
  27. ^ «Боковые заметки: Ленивые списки в Groovy» . 3 февраля 2011 г.
  28. ^ "Groovy's Fold" . 20 июня 2011. Архивировано из оригинала 13 февраля 2015 года . Проверено 12 февраля 2015 года .
  29. ^ «Функциональное программирование с помощью Groovy» . 5 ноя 2011.
  30. ^ "Функциональное программирование в Groovy" . Архивировано из оригинала на 2012-10-08 . Проверено 7 октября 2012 .
  31. ^ "JsonBuilder" . Архивировано из оригинала на 2012-10-02 . Проверено 7 октября 2012 .
  32. ^ "Groovy Strings - разные способы их создания" . 26 декабря 2009 г.
  33. ^ «Метапрограммирование во время компиляции - Преобразования AST» . Архивировано из оригинала на 2012-10-14 . Проверено 7 октября 2012 .
  34. ^ «Документация ScriptRunner» .
  35. ^ "ScriptRunner Press Release со статистикой принятия" .
  36. ^ "Groovy DSL для бизнес-логики OFBiz" . Открытая вики-страница проекта Apache OFBiz .
  37. ^ "Примеры простых методов с использованием Groovy" . Открытая вики-страница проекта Apache OFBiz .
  38. ^ «Grails в LinkedIn» . Проверено 2 июня 2015 .
  39. ^ «Встроенные сценарии Groovy» . www.logicmonitor.com . Проверено 20 ноября 2020 .
  40. ^ «Трубопровод Дженкинса» .
  41. Перейти ↑ Rocher, Graeme (2 октября 2008 г.). «Блог Грэма Роше: перезапуск Sky.com, написанный в Grails» . Блог Грэма Роше . Проверено 2 июня 2015 .
  42. ^ Анализ безопасности новых приложений для умного дома
  43. ^ «Сценарии и библиотека скриптов | Сценарии и свойства» . www.soapui.org . Проверено 2 июня 2015 .
  44. ^ "Глава 11. Groovy интеграции" . docs.jboss.org . Проверено 2 июня 2015 .
  45. ^ «vCalc, первая социальная платформа для мира математики» . Проверено 5 мая 2016 .
  46. ^ "Wired.Com" (PDF) . www.springsource.org . Проверено 2 июня 2015 .
  47. ^ "XWiki SAS" (PDF) . www.springsource.org . Проверено 2 июня 2015 .
  48. ^ "Документация Grooscript" . 12 сентября 2016 года Архивировано из оригинала 28 июня 2017 . Проверено 4 июля 2017 года .
  49. ^ «Презентация на SpringOne / 2GX на Grooscript» . 13 декабря 2015 г.
  50. ^ "Онлайн-преобразования Grooscript" . 15 мая 2017. Архивировано из оригинала 9 июля 2017 года . Проверено 4 июля 2017 года .

Источники [ править ]

  • Кениг, Дирк; Пол Кинг; Гийом Лафорж; Гамлет д'Арси; Седрик Шампо; Эрик Прагт; Джон Скит (2015). Groovy в действии, второе издание . Укомплектование персоналом. ISBN 978-1-935182-44-3.
  • Барклай, Кеннет; Джон Сэвидж (2007). Программирование Groovy: Введение для разработчиков Java . ISBN 978-0-12-372507-3. Архивировано из оригинала на 2010-01-12 . Проверено 19 июля 2007 .
  • Дэвис, Скотт (2008). Отличные рецепты: смазка колес Java . ISBN 978-0-9787392-9-4.
  • Субраманиам, Венкат (2008). Программирование Groovy: динамическая производительность для Java-разработчика . ISBN 978-1-934356-09-8.

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Домашняя страница Grooscript
  • Groovy в Curlie