groovy учебник
Начало работы с groovy
Поиск…
замечания
Groovy - это
является необязательно типизированным динамическим языком для виртуальной машины Java
опирается на сильные стороны Java, но обладает дополнительными возможностями питания, вдохновленными такими языками, как Python, Ruby и Smalltalk
предоставляет современные возможности программирования для разработчиков Java с почти нулевой кривой обучения
обеспечивает возможность статического типа проверки и статической компиляции кода для обеспечения надежности и производительности
поддерживает языки, специфичные для домена, и другой компактный синтаксис, поэтому ваш код легко читается и поддерживается
упрощает создание сценариев оболочки и создания скриптов с помощью мощных обрабатывающих примитивов, возможностей OO и Ant DSL
повышает производительность разработчиков за счет сокращения кода лесов при разработке веб-приложений, графического интерфейса, базы данных или консольных приложений
упрощает тестирование, поддерживая единичное тестирование и издевательскую готовность
плавно интегрируется со всеми существующими Java-классами и библиотеками
компилируется прямо на Java-байт-код, поэтому вы можете использовать его везде, где вы используете Java
Версии
Версия | Примечания к выпуску | Дата выхода |
---|---|---|
2,4 | http://groovy-lang.org/releasenotes/groovy-2.4.html | 2015-01-21 |
2,3 | http://groovy-lang.org/releasenotes/groovy-2.3.html | 2014-05-05 |
2,2 | http://groovy-lang.org/releasenotes/groovy-2.2.html | 2013-11-18 |
2,1 | http://groovy-lang.org/releasenotes/groovy-2.1.html | 2013-01-24 |
2,0 | http://groovy-lang.org/releasenotes/groovy-2.0.html | 2012-06-28 |
1,8 | http://groovy-lang.org/releasenotes/groovy-1.8.html | 2011-04-27 |
1,7 | http://groovy-lang.org/releasenotes/groovy-1.7.html | 2009-12-22 |
1,6 | http://groovy-lang.org/releasenotes/groovy-1.6.html | 2009-02-18 |
1,5 | http://groovy-lang.org/releasenotes/groovy-1.5.html | 2007-12-07 |
1,0 | 2007-01-02 |
Установка или настройка
Существует два распространенных способа установки Groovy.
Скачать
Бинарный файл Groovy можно загрузить на странице загрузки веб-сайта Groovy. Вы можете распаковать архив и добавить путь к %GROOVY_HOME%/bin/groovy.bat
в переменную системной среды PATH, где% GROOVY_HOME% - это каталог, в котором распакован Groovy.
SDKMAN
Другой вариант - использовать SDKMAN . Этот вариант быстро вырос в популярности и упрощает управление несколькими версиями Groovy. Он также поддерживает другие приложения в экосфере «GR8». Эта опция работает очень хорошо на Linux и Mac, но требует Cygwin для Windows.
Следуя инструкциям на странице загрузки Groovy , вы можете выполнить следующие шаги для установки SDKMAN.
$ curl -s get.sdkman.io | bash
После установки SDKMAN теперь у вас есть доступ к команде sdk
. С помощью этой команды вы можете делать много полезных вещей.
Установить Groovy
$ sdk install groovy
Это установит последнюю версию Groovy.
Список версий Groovy
$ sdk ls groovy
Это позволяет вам запускать команду ls
для Linux в программном обеспечении Groovy, перечисляя все доступные параметры. Существует *
рядом с каждой установленной версии, и >
, чтобы указать текущие версии.
Переключить версии Groovy
$ sdk use groovy 2.4.7
Это изменит текущую версию Groovy на 2.4.7. Если у вас установлены другие версии, вы можете переключиться на любой из них.
Вы можете указать текущую версию groovy с помощью команды groovy -version
.
шикарно-GVM
Первоначальным именем SDKMAN был GVM, а posh-gvm - это порт GVM для Windows Powershell. Итак, если вы разрабатываете на компьютере с Windows и не хотите использовать SDKMAN на Cygwin, для вас будет пош-gvm. Он работает так же, как SDKMAN, но вместо sdk
команда gmv
. Так
PS C:\Users\You> gmv install groovy
установит groovy через шикарный gvm на вашей машине Windows.
Привет, мир
Версия Groovy Hello World.
println 'Hello World!'
Привет, мир В groovy
Следующий пример иллюстрирует простейший Hello World
в groovy с помощью скрипта, поместите следующий фрагмент кода в файл, скажем helloWorld.groovy
println 'Hello World!'
Как выполнить: В командной строке groovy helloWorld.groovy
Результат: Hello World!
Использование Groovy в проекте Java
Groovy имеет доступ ко всем классам Java, на самом деле классы Groovy представляют собой Java-классы и могут управляться JVM напрямую. Если вы работаете над проектом Java, использование Groovy в качестве простого языка сценариев для взаимодействия с вашим Java-кодом - это не проблема.
Чтобы сделать вещи еще лучше, почти любой Java-класс можно переименовать в .groovy, скомпилировать и запустить и будет работать точно так же, как и он, groovy близок к тому, чтобы быть супер-набором Java, это заявленная цель groovy.
У Groovy есть REPL. groovysh
поставляется с Groovy и может использоваться для быстрого создания и тестирования класса Java, если ваш путь к классам настроен правильно. Например, если ваш classpath
указал на ваш каталог «classes / bin» вашего eclipse, вы можете сохранить свой файл в eclipse, перейти к groovysh
и создать экземпляр класса для его проверки.
Причины использования Groovy для этого, а не просто Java: Классный загрузчик GREAT при сборе новых классов по мере их компиляции. Обычно вам не нужно выходить / повторно запускать groovysh
мере вашего развития.
Синтаксис TERSE. Это не очень удобно для поддерживаемого кода, но для скриптов и тестов он может значительно сократить ваш код. Одна из больших вещей, которую он делает, - это исключить проверенные исключения (или, точнее, превратить все проверенные исключения в непроверенные исключения). Это превращает код таким образом (печать привет после одной секунды):
class JavaClass {
public static void main(String[] args) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
// You shouldn't leave an empty catch block, but who cares if this was interrupted???
}
System.out.println("Hello!");
}
}
в Groovy's:
Thread.sleep(1000)
print "Hello!"
У Groovy также очень сильная синтаксиса инициализации. Это позволяет вам указывать данные так, как вам нравится, не задумываясь об этом:
В Java для инициализации карты вы должны, вероятно, сделать что-то вроде этого:
String[] init = { "1:Bill", "2:Doug", "3:Bev" };
// Note the rest of this can be put in a function and reused or maybe found in a library, but I always seem to have to write this function!
Map m = new HashMap<Integer, String>();
for(String pair : int) {
String[] split = pair.split(":");
m.put(new Integer(split[0]), split[1])
}
Это неплохо, но это что-то еще для поддержания. В groovy вы бы просто использовали:
Map map = { 1 : "Bill", 2 : "Doug", 3 : "Bev" }
И все готово. Синтаксис списка так же прост.
Другим действительно большим преимуществом является синтаксис закрытия groovy. Это потрясающе скучно и весело, несколько сложнее в обслуживании, но для сценариев это не приоритет. В качестве примера, вот какой-то код groovy, чтобы найти все .txt
файлы, содержащие слово Hello
в текущем каталоге:
println new File('.').files.findAll{ it.name.endsWith('.txt') && it.text.contains('Hello') }.collect{ it.name }
В этом примере используются несколько трюков «Groovy»:
.files
относится кgetFiles()
- groovy может переключаться между getter / setter и синтаксисом свойств по желаниюit.
относится к текущему элементу итерации.{ it }
является ярлыком для{ it -> it }
, например:[1, 2, 3] .collect {it ^ 2} == [1, 4, 9]
it.text
(гдеit
файл) использует метод groovy, который добавляет вFile
для извлечения всего текста файла. Это удивительно полезно в сценариях.
Привет мир Shebang (linux)
Учитывая hello.groovy файл с контентом:
#!/usr/bin/env groovy
println "Hello world"
Может выполняться из командной строки, если задано разрешение на выполнение как
$ ./hello.groovy
Использование инъекции () В списке для создания CSV-строки
В Groovy метод inject () является одним из кумулятивных методов, который позволяет нам добавлять (или вводить) новые функции в любой объект, реализующий метод inject (). В случае коллекции мы можем равномерно распределить замыкание на набор объектов, а затем сопоставить результаты в одно значение. Первым параметром метода inject () является начальное значение кумуляции, а вторым параметром является замыкание.
В этом примере мы возьмем список строк в качестве параметра и выведем значения этих строк, разделенных запятыми. Я использовал эту функцию, чтобы добавить список значений в строку запроса REST, и, если вы немного измените ее, я использовал ее для включения значений в инструкцию SQL как часть предложения IN. Вот код для этого:
public String convertToCSV( List<String> list ) {
if (list == null) {
return ""
}
return list.inject( '' ) { result, item ->
result + ( result && item ? ',' : '' ) + ( item ? "${item.trim()}" : '' )
}
}
assert convertToCSV( null ) == ""
assert convertToCSV( ["aaa", "bbb ", null, " ccc "] ) == "aaa,bbb,ccc"
В этом примере первым параметром метода inject () является строка с нулевой длиной, что означает, что при обработке первого элемента списка результат также является строкой нулевой длины. Это разрешает false в первой тройной оценке, поэтому мы не получаем запятую в начале строки. С каждой последовательной итерацией через элементы списка результат становится конкатенацией самого себя, запятой, а затем следующим элементом, пока мы не достигнем последнего элемента в списке.
Преимущество такого подхода заключается в том, что для выполнения конкатенированного результата String вам не нужна переменная вне цикла. Подразумевается, что это может привести к побочным эффектам в вашем коде. С помощью метода inject () это поведение вводится, и коллекция сопоставляет результат вызовов с закрытием для вас. Недостатком этого подхода может быть читаемость. Но с некоторым опытом становится легче читать и понимать, и я надеюсь, что этот пример поможет вам достичь этой цели.