1. Groovy vs. Perl: можно скриптовать.
Почему захотелось groovy?
www.ivis.ru он же www.eastview.com -
это коллектор периодических изданий.
Всё сделано на Java, и только скрипты
обработки данных из газет, журналов
и новостных лент — на Perl.
2. Захотелось моноплатформенности.
Groovy понравился, но испугались,
потому что:
1) очень много скриптов
переписывать с Perl-а;
2) год назад Groovy казался слишком
молодой технологией.
Но за год Groovy шагнул с версии 1.5.6
до 1.6.3. А в нём лучше regexp-ы.
3. Groovy — это
написанный на Java
объектно-ориентированный
скриптовый язык,
компилируемый в байт-код,
исполняемый на JVM.
На Groovy написан Grails -
RoR-подобный web-фреймворк.
4. Достоинства Groovy.
Тесная интеграция с Java:
- прямо в Groovy скриптах можно
писать Java-код, потому что GDK -
это расширение JDK;
- из java-кода можновызывать
код groovy;
- из groovy-кода можно вызывать
код скомпилированных классов java.
5. Существует 4 способа запускать
groovy, если не счиатать
web-приложения:
а). сохранить скрипт в файле и
запустить из командной строки
>./script.groovy
привет
>cat script groovy
#!/usr/bin/env groovy
println 'привет'
6. б) скомпилировать в java-класс
и запускать с помощью java
> groovyc script.groovy
> ls *class
script.class
> java cp $GROOVY_HOME/embeddable/groovyall1.6.2.jar:. script
привет
7. в) выполнять код groovy с помощью
groovy shell
>groovysh
Groovy Shell (1.6.2, JVM: 1.6.0_07)
Type 'help' or 'h' for help.
-------------------------------------
groovy:000> class ФИ {
groovy:001> def Фамилия
groovy:002> def Имя
groovy:003> def какТебяЗовут(){ quot;Меня зовут ${Имя} ${Фамилия}quot; }
groovy:004> }
===> true
groovy:000> Дизайнер = new ФИ (Фамилия: quot;Ивановquot;, Имя: quot;Иванquot; )
===> ФИ@652110
groovy:000> Дизайнер.какТебяЗовут()
===> Меня зовут Иван Иванов
groovy:000>
13. Структуры даных (Collections)
Массивы (Lists) — на основе ArrayList
Хэши (Maps) — на основе HashMap
Для массивов определено много
разных методов: grep, sort, pop, push,
remove, intersect, disjoint, removeAll,
findAll, isCase, max, min, every, any, join, ...
16. Массивы (продолжение)
то, что в perl: map
то в groovy: each
> perl -e 'print quot;$_nquot; for map { $_ + 7 } (1,2,3);'
8
9
10
> groovy -e '[1,2,3].each{ println it + 7 }'
8
9
10
17. Массивы (продолжение)
то, что в perl: split, то и в groovy: split
> perl -e 'print quot;$_nquot; for split(/, / ,quot;Вася, Петяquot; );'
Вася
Петя
> groovy -e quot;s ='Вася, Петя'; s.split(', ').each{ println it }quot;
Вася
Петя
18. Массивы (продолжение)
что в perl grep, то и в groovy grep
> perl -e 'print quot;$_nquot; for grep { /шка$/ } qw(шишка ёлка);'
шишка
> groovy -e quot;['шишка', 'ёлка'].grep(~/.*шка$/).each{println it}quot;
шишка
В groovy имеется unique
> groovy -e '[1,1,1,2,2].unique().each{println it}'
1
2
25. Регулярные выражения в groovy
(продолжение)
// чтобы найти все совпадения - findAll
def string = quot;Moe Fine, Howard Fine, and Larry Finequot;
def stooges = string.findAll(/(w+) Fine/)
assert stooges == [quot;Moe Finequot;, quot;Howard Finequot;, quot;Larry Finequot;]
// чтобы захватывать группы — используют запыкания
def string = quot;Moe Fine, Howard Fine, and Larry Finequot;
def firstNames = string.findAll(/(w+) Fine/)
{
match, firstName -> firstName
}
assert firstNames == [quot;Moequot;, quot;Howardquot;, quot;Larryquot;]
26. Регулярные выражения в groovy
(продолжение)
foo = 42
str = '''blah
#foo#
blah'''
re = '''(?xm) # to enable whitespace and comments
# # a pound sign
(w+) # the variable name
# # another pound sign
'''
finder = str =~ re
found = finder[0]
out = str.replaceAll(found[0], evaluate(found[1]).toString())
assert out == '''blah
42
blah'''
27. Что читать про groovy
'Groovy in Action', Manning, 2007
Dierk Koenig, Andrew Glover,
Paul King, Guillaume Laforge, Jon Skeet
'Groovy Recipes: Greasing the Wheels of Java'
Pragmatic Bookshelf, 2008
Scott Davis
28. * http://groovy.codehaus.org/ - домашняя страница groovy
* http://voituk.kiev.ua - блог Вадима Войтюка
«Записки искателей»
* http://pleac.sourceforge.net/pleac_groovy/index.html
PLEAC - Programming Language Examples Alike Cookbook
* http://blog.alno.name/2008/06/using-groovy/ -
блог Алексея Носкова
* циклы статей Эндрю Гловера на ibm.com, например:
- 'Практически Groovy:
Разметка с помощью Groovy Builders'
http://www.ibm.com/developerworks/ru/library/j-pg04125/
- Практически Groovy : MOP и мини-языки
http://www.ibm.com/developerworks/ru/library/j-pg09205/
29. * Про регулярные выражения — blog of Ted Nailed
'Groovy: Don’t Fear the RegExp'
http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/
'Groovy 1.6.1 released with new find and findAll
regexp methods on String'
http://naleid.com/blog/2009/04/07/groovy-161-released-
with-new-find-and-findall-regexp-methods-on-string/