Groovy: Про коня и лань 2
Недавно я писал о том, как интегрировать код, написанный на стандартной Java и на JavaFX. Сегодня речь пойдет о совмещении программ на Java с другим дружественным синтаксисом —
Рецепт интеграции Java и Groovy программ я нашел в уже неоднократно упоминавшейся Библии Groovy-программистов — книге "Groovy in action" (см. главу 11).
Зачем вообще эта интеграция нужна? Программы на Groovy пишутся в разы быстрее, выглядят компактнее, проще правятся, не нуждаются в компиляции. Это всё та же Java, только «обезжиренная». Groovy-скрипты при исполнении преобразуются в Java байт-код и исполняются в среде обычной Java-машины, т.е. не нужны какие-то особые нативные библиотеки. Groovy-скрипт можно откомпилировать в обычный Java-класс, который ничем не будет отличаться от миллиардов своих собратьев.
Первый способ интеграции — через объект GroovyShell:
В качестве параметра методу evaluate() можно передавать гораздо более длинный текст, чем приведен в примере. Кроме того, скрипт можно заранее записать в файл и также передавать его методу evaluate(). Можно также считывать скрипт из потока.
Интегрировать Groovy в Java можно также с помощью специального класса GroovyClassLoader:
Java-программисты легко рассмотрят здесь стандартные способы работы с классами и объектами посредством концепции Reflection.
И все-таки получается странная вещь: чтобы достучаться из Java-программы до изящных конструкций Groovy приходится городить громоздкие строчки. Однако цель оправдывает средства, особенно если задействовать такое могучее средство наследования Java, как интерфейсы. Об этом — в следующий раз.
Рецепт интеграции Java и Groovy программ я нашел в уже неоднократно упоминавшейся Библии Groovy-программистов — книге "Groovy in action" (см. главу 11).
Зачем вообще эта интеграция нужна? Программы на Groovy пишутся в разы быстрее, выглядят компактнее, проще правятся, не нуждаются в компиляции. Это всё та же Java, только «обезжиренная». Groovy-скрипты при исполнении преобразуются в Java байт-код и исполняются в среде обычной Java-машины, т.е. не нужны какие-то особые нативные библиотеки. Groovy-скрипт можно откомпилировать в обычный Java-класс, который ничем не будет отличаться от миллиардов своих собратьев.
Первый способ интеграции — через объект GroovyShell:
GroovyShell = new GroovyShell();
Object result = shell.evaluate("12 + 23");
System.out.println(result); // Выведется число 35
В качестве параметра методу evaluate() можно передавать гораздо более длинный текст, чем приведен в примере. Кроме того, скрипт можно заранее записать в файл и также передавать его методу evaluate(). Можно также считывать скрипт из потока.
Интегрировать Groovy в Java можно также с помощью специального класса GroovyClassLoader:
GroovyClassLoader gcl = new GroovyClassLoader;
Class helloClass = gcl.parseClass("Hello.groovy");
GroovyObject helloObj = (GroovyObject) helloClass.newInstance();
System.out.println(helloObj.invokeMethod("hello", new Object[]{}));
Java-программисты легко рассмотрят здесь стандартные способы работы с классами и объектами посредством концепции Reflection.
И все-таки получается странная вещь: чтобы достучаться из Java-программы до изящных конструкций Groovy приходится городить громоздкие строчки. Однако цель оправдывает средства, особенно если задействовать такое могучее средство наследования Java, как интерфейсы. Об этом — в следующий раз.
Комментарии (4)
RSS свернуть / развернутьЯ имею ввиду что простое руководство как воспользоваться всем этим?
Gangsta
Здесь
it — универсальное для Groovy имя переменной, обрабатываемой внутри блока, называемого Closure.
=~ — знак, проверяющий на соответствия переменной регулярному выражению. Оно заключено в слэши. В нормальной Java для такой проверки потребовалось бы строки 3-4, причем весьма заковыристых, с кучей импортов.
$it — переменная, включенная внутрь строки. В Java
выглядело бы как
yababay
Примерно такое-же соотношение строк в программах на «С++» и
«CAMBASIC» в «Octagon 6ххх», но применение все-равно зависит от конечной
задачи…
Больше языков — хороших и разных !
Markony
yababay
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.