Используя Groovy как язык сценариев

Я предпочитаю использовать языки сценариев для коротких задач, что-либо, таких как действительно простой http бот, объемные данные импорта/экспорта к/от где-нибудь, и т.д. и т.д... Основные одноразовые сценарии и простой материал. Точка быть, что язык сценариев является просто эффективным инструментом для записи быстрых программ с. Что касается моего понимания Groovy в этой точке...

Если бы необходимо было программировать в Groovy и Вас wan't для записи быстрого сценария, то разве Вы не были бы вынуждены к возвращению к регулярному синтаксису Java (и мы знаем, как это может быть замысловатым по сравнению с языком сценариев), чтобы сделать что-либо более сложное? Например, если бы я хочу сделать некоторые сценарии http, я только скоро вернулся бы при использовании синтаксиса Java для вызова Commons HttpClient? Мне точка языка сценариев для быстро введенных и менее принудительных конструкций. И вот другая вещь, не кажется, что существует любой стимул для отличных основанных библиотек, которые будут разработаны, когда уже существуют так многие, хороший Java там, таким образом делая отличным, кажется, зависимый язык Java с незначительными функциями сценариев.

Таким образом, прямо сейчас я задаюсь вопросом, мог ли я переключиться на Groovy как язык сценариев или продолжить использовать более общий язык сценариев, такой как Perl, Python или Ruby.

10
задан Zombies 15 April 2010 в 13:46
поделиться

5 ответов

@Zombies, позвольте мне показать вам небольшой пример из скрипта, который я недавно написал:

def fetch(build, toFile) {
    new FTPClient().with {
        connect ftpServer
        enterLocalPassiveMode()
        login ftpUser, ftpPassword
        changeWorkingDirectory "/var/staging/revision-${build}"
        fileType = FTPClient.BINARY_FILE_TYPE
        toFile.withOutputStream { ostream -> 
            retrieveFile "build-${build}.zip", ostream 
        }
        disconnect()
    }
}

Он использует API commons-net, но я думаю, вы согласитесь, что он имеет гораздо более четкий синтаксис, чем сопоставимая программа на Java. Поэтому я не думаю, что использование Java API противоречит цели создания языка сценариев. Кроме того, это помогает вам использовать ваши существующие знания об API Java, так что это очень прагматичный подход.

12
ответ дан 3 December 2019 в 14:43
поделиться

Groovy может быть очень удобен для написания сценариев. Недавно мне понадобился сценарий для извлечения зависимостей Maven в каталог lib , и в итоге я получил отличный сценарий. Этот фрагмент анализирует pom и выдает список jar-файлов. Довольно приятно для синтаксического анализа XML!

#!/usr/bin/env groovy
def pom = new XmlSlurper().parse('pom.xml')
def repo = "${System.env.HOME}/.m2/repository"

pom.dependencies.dependency.each { dep ->
    def jarName = "${dep.artifactId}-${dep.version}.jar"
    def groupPath = dep.groupId.text().replaceAll('\\.', '/')
    def jarPath = "${repo}/${groupPath}/${dep.artifactId}/${dep.version}"
    println "$jarPath/$jarName"
}
5
ответ дан 3 December 2019 в 14:43
поделиться

Groovy "из коробки" заменяет большое количество общих классов более удобными версиями или языковыми конструкциями, включая классы для XML, HTTP-запросов, доступа к базам данных SQL. и регулярные выражения. Для большинства задач по написанию сценариев вам вообще не придется использовать библиотеки Java (хотя у вас все равно будет такая возможность). Но если в вашем сценарии используются чистые библиотеки Java, Groovy будет намного лучше, чем обычная Java. Отличительной чертой Groovy является «клейкий» код, такой как настройка структур данных и файлового ввода-вывода.

Карта и список позволяют создавать списки и карты, совместимые с Java; обычные объекты Java, которые работают с классами Java. Groovy часто превращает вызов многострочного метода Java с объявлением переменных и инициализацией в однострочный.

Рассмотрим этот короткий фрагмент для загрузки всего файла в строку:

def fileContents = new File(filename).text

по сравнению с

String fileContents = "";
try {
    BufferedReader reader = new BufferedReader(new FileInputStream(filename));
    String line = null;
    while ((line = reader.readLine()) != null) {
        text = text + line + "\n";
    }
} catch (IOException e) {
    e.printStackTrace();
}

Обработка исключений часто не является важным аспектом в сценариях, и ее можно легко проигнорировать.

Основная сила Groovy как языка сценариев - это прямой и удобный доступ к огромной библиотеке Java-кода.Если вам это не нужно, groovy по-прежнему предоставляет среду сценариев, столь же богатую, как и другие языки, такие как perl, python или ruby.

4
ответ дан 3 December 2019 в 14:43
поделиться

Одна из целей Groovy - обеспечить прозрачное взаимодействие с Java. Groovy по замыслу является «Java-зависимым языком с функциями написания сценариев». Однако я не думаю, что эти функции второстепенные - Groovy имеет много функций, которых нет в статических языках программирования (таких как Java).

Подведем итог: если вас совсем не волнует Java, используйте более универсальный язык сценариев, такой как Python или Perl. Если вы хотите использовать кодовую базу Java в стиле сценариев, Groovy - хороший вариант.

5
ответ дан 3 December 2019 в 14:43
поделиться

Например, если я хочу выполнить скрипт http, не мог бы я просто вернуться к использованию синтаксиса java для invoke Commons HttpClient?

Вы бы «вернулись к использованию Commons HttpClient», но вы бы вызывали его, используя синтаксис Groovy, а не синтаксис Java. Синтаксис Groovy намного компактнее синтаксиса Java и поэтому лучше подходит для написания сценариев. Другими словами, использование библиотек Java в Groovy требует намного меньше кода, чем использование библиотек Java в Java.

не похоже, что есть какой-либо стимул для разработки библиотек на основе Groovy, когда уже существует так много хороших java-библиотек

Вместо того, чтобы разрабатывать совершенно новую библиотеку, автор библиотеки Groovy часто предоставляет "Groovier" API для существующей библиотеки Java. Примеры включают построитель Hibernate, предоставляемый Grails, и HTTP Builder (который делегирует Commons HttpClient).

Эти Groovy API предоставляют более компактную и идиоматическую альтернативу прямому использованию Java API.

4
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: