Поиск…


замечания

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 () это поведение вводится, и коллекция сопоставляет результат вызовов с закрытием для вас. Недостатком этого подхода может быть читаемость. Но с некоторым опытом становится легче читать и понимать, и я надеюсь, что этот пример поможет вам достичь этой цели.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow