Презентация: Groovy – другой взгляд на Java

17 March 2008, 18:35 | Vadim Voituk

Эта през��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������нтаци�� должна ����ла быть п����ка��ан�� на конф��р��нц��и по динамическим языкам про����������амми����вания Exception #7

��л��йд 1: П��рвы�� слайд

��обрый день.
Для те���� кому ��е�������� было ��роче����ь программку на��омню, чт�� меня зову�� Вадим Во��тюк и �� рамк��х это���� конференции �� буду р������сс����а��ы��ат�� о ��з����е программирования ����ак Groovy.

Подо��ре��аю что пу��лика тут соб��ал��сь сверх «продвинутая», потому хотелось бы провести не����о������������ь��ой блиц-опр����с.
– Поднимите по��алуйста руки ��е, кто знает ��то есть такой язык программ��ова��ия Groovy и что он выполняется на платформе JVM ?

– А кто и�� вас хо��ь раз с��ачал, уста��овил и написал HelloWorld програм��у с е��о использованием?
(если р��к будет мн��го)
А кто более-и��и менее регул��рно использует?
TODO: Ско������ектир����вать доклад ��ог��асно обознанности слу����те��я.

– Спасибо

Т��, кт���� рук не поднимал, не п��с��������шав меня, рискуют быть «не п��и делах» на следующем докла��е “Р��зраб��тка Веб-пр����ожен���� с и��������ол��зова��ием Grails”

��ла��д 2 : Groovy ��� ����то…

Итак, ��т�� же такое Groovy?

В первую очер������дь это, конечно же, ��инамическ����й язык про��р��м����ир��вани��.
Первая в��рсия Groovy б��ла создана е��ё в 2003 году, но дейс��вител��но популярность ���� набрал за 2006-2007 года.

Во-вторых Groovy – это яз��к для JVM . Следовательно ���� компилируется и в тот же б������йт-код, и ис��олняе��ся на т��й же ��иртуал��ной машине, что и старая ������брая Java.

Основно�� подход Groovy – меньше ����ск��ч��ог����» оформительского код�� – больше просты��������, ����и����аемы�� и э����ега����тн���� решений. Потому �� основу е������ синтаксиса ����ыли собраны полож����те����н��й особенности ��у��ачных» динамических языков.

И ����к результат в������е сказанного – Groovy дает пов��ш��ние производите��ьности разр����б������тчико����������, уп����още��ие тестирования и ����а��ис���������� тестового кода, и что самое гл������ое – это сох��а��ени�� инвестиций �� Java -платф������у.
Т��есть ��ам не нужно «выбросить» ������се что в���� делали ����о сегодняшнего дня, и начать все переписывать на Groovy.

Слайд 3 : Пример Java-код

��ап��шем достаточно прост��й Java-код, ко��ор����й создает спис��к имен, а потом выво��ит из не��о все, которые и������еют длин�� 4 сим������л�� и ��ен��ш��. Такой ��ебе типичный п��имер из у����еб��и��а.
У��е вижу ��х��дн��е ул������б��и разработчиков на Ruby & Python которые мо��ут это написать в 2 -3 строки :)
Как видн������ такой код достаточно проблематичн�� уместить �� один слайд презентации.
Потому не��ног�� перепишем ����������о, ����емного используя во������ожн����ст�� Java5.

Сла�������� 4 : П����м����р Java-к��д

Получится ��то-то ������де такого. Пауза…

Теперь ������ч����������������вой вопрос: а з�� счет ������ег�� нам ��д������о��ь так сжать ��то�� код?

А все достаточно б��нал����о
1. П��дд��ржка массивов ��а ур����вне синтаксиса ��з����ка (первая строк�� )
2. ��росты�� возможности и����рир����ван��я по ��оллекциям

По ������ути изменилось мало, но писать и читать прих��дится меньше.
Groovy в ����то�� смысле ��о��ел ещё дальше.

��лай�� 5 : Пример Groovy-код и ��ез������ль������т

Имеем всего несколько строк кода, которые по делают в���� тоже.
Думаю ������ри��������������еден��ый код больш�� понятен Python или Ruby программистам, но ���� принципе ������ вдаваясь ���� подробности, суть д����жн�� быть ����с���� всем.
В отлич����и от Java, к������торый на ��ровне синтаксиса ������к�� поддерживает т������л��к�� String, Groovy ж�� поддерживает ��ост��то������������ много ����пов.
��а����и��ер коллекции – ��е����ая строка, замыкания – втора�� и четв��ртая строка

Слай���� 6: Ещё возможности

  1. Огромн��е количесто уже написаного Java-кода (библи����те��и, фреймворки, технологии, …)
    Первый плюс Groovy – это мощь JRE, которая стоит ��а ним
    Бинарная со��местимос��ь с Java. То��ст�� любой ко�� написанный ��а Java м��������т быть ����пользован в Groovy коде и наоборот
    В результате и����ее�� огромное кол����ество библиотек, классов, фреймворков, доступных из Groovy точно т��к же как и Groovy доступен в них
    П��имеры: JasperReports, Struts, …
  2. Ди����ам������ческа�� типизация, ��а��ыкани��, би��де��������ы GroovyBeans и ��ругой syntax-sugar ���
    Что ������ы там н�� говорили, что д������н��мич��с������������я типизация зло, и провоцирует “��а��ив����ть” на архитектурные реш��ния, часто она ������ановится той “silver bullet”, которая п����зв������ет существенно ����о������ра��ит���� ��роки бюджеты ����зрабо��ки.
    Groovy – динамичен, причем ��есь его динамизм пр��исхо��ит в Realtime
    Что же касается о����исан��ых здесь замы��ан��й, б��лдер��в, ���� тому ��одобных преле��т��й жизни – в���� это уже увидим на примерах
  3. Метапрограммирование – основа реализ��ции динамической природы Groovy н�� платформе JVM, которя сама ��о себе ����е��т статичную типизаци..
    Что такое М��тапрог��������ммирование и ��етак����асс�� ������� мы ����л��к�� что ��иде��и в мастер-классе Ан��рея Светлова – так вот я уверен что Groovy тоже так може�� %)
  4. Те же механизмы �� и��ст��у��енты поддержки проц��сса разрабоки
    Groovy подд����живается всеми сре��а����, ��тилит��ми, build-framework-ам��, к которым ��же так при��ыкли р����з��рботч��к�� (конеч��о же с применением соотв��тс����вующих плагинов).
    ����с��лю����е����ием является наве��ное только GroovyDoc ��� ��нал��г JavaDoc.
  5. Grails – наш ��тв��т RoR подходу
    Про Grails ничего ��о��орить не б����ду, о нем мы узнаем более подробно в следующем докладе.
  6. Прост в и����чении и понимании
    ��ут наверное дос��а��очно просто ��казать что Groovy в о����в��е��ии даже прощ�� чем VisualBasic :)
    А ��л�� Java разработч��ка Groovy выглядит почти как оригин��льна�������� Java.
    Если бу������������т интерестно, во ����ремя перерыва р������������а��у пару Success-story о ����р����������те Groovy.
  7. ��т�� ещё нема��оважно, так эт�� то, что Groovy – это ��е скриптовый интепретируемый язык, ������кими являются JPython, JRuby, BeanShell.
    При выполнении Groovy-ко�� компилируется ���� JVM баткод, и т������ьк������ после этого исполняется.

Демонстрацию ������оз��ожност��й Groovy проведу н�� примерах:

Вроде рассказал о т��м, какой белый и пу��истый Groovy – уже рассказал, покажу на примере ��го основные кон����епции

Слайд 7: Основы ��интаксиса

Динамическая и опционально статическ��я типизация
Тоесть мы можем ук����зыв��ть тип обье��та, а можем н���� указывать. При этом любые п��р������е��ные необходимо ��ер��д обьявлять. Для ��е��ипизиро������нных используется клю������о�� слово языка “ def ���

Втсроенный синт��ксис для с����������������ов, хе��ей, ����с������������в, beans .
Выглядит эт�� приблизительно та�� как в JavaScript.
Кстати анал����г��������о JavaScript мо��но получать д��ст�������� к свойствам обьекта:
����жно через «т����������чку» а можно через оператор квадратн��й скобки :)

Замыкания
В Groovy ����ень похожи на ано����мные функции в JavaScript

В Groovy также возможна П��ре��р��зка операторов .
Происходит ��то просто путем переопределения ��е��од���� с магиче������ким именем.
Например мет��д�� plus(). ����������и не о��иб��юсь, то в Python ��то происходит ��нал����ги��н���� образом.

Слайд 8: ��асши��������е��н����е языковые во��м����жности

Все синтаксич��ск����е «примочки» о каких м�� поговорили ��олько что, достаточно попу������рн�� во все���� динамических язык��х.
Те же, о каки�� я ра������ажу дальше ��� достаточно сп����������фи����ны для Groovy.

Оператор safe navigation – з��меняе���� собой че����ду проверок обьекта на null, и вы��ов методов
Приведенная тут цепо��ка вызовов никогда н�� вызовет NullPointerException

Elvis operator ��� это нас����д��и�� тернарного опе��атора. Как он работает – видно ��������а примере

Категории и Expando – дают возможность р������ир��ть любой кл��сс, или п��ре������ат����ь любой метод в бл��ке кода. Работает это путем ��з������ения метакласса

Template Engine ������� в Groovy встроен простой Template Engine, очень по��ожи�� на Velocity.
Оч��нь удобно если нужно сгенерировать Java ил�� Groovy код по шаблону.

��ар��и��г – понят��е прийшло из фун��ционально����о программирования.
Позволяет в функции ������ несколькими пара����етрами ������������афиксиро��ат��» ����дин и�� параметров, тем самым получить уже другую функцию, но с ��еньшим числом па����м��т��ов.
Конеч����о же в терминах ����р����рамм����о��ания функциями являют��я методы или замыкания

Alias -иснг – В Groovy н�� любую языков��ю конструкцию (класс, обьект, метод, …) мож��о создать alias
����ы��ае�� очень уд����б��о использовать ���� import-ах при дли��н��х именах классов.

Duck – typing – возможность утверждать что обьект и����еет определенный тип не на основе н������л��чия в сигнат��ре интерфейса, который он имплементирует, а по наличию реализованны������ методов.
По ��ут�� и это есть бол��е правильный ����ермин для оп����сания типизации в Groovy, чем просто «д������нами��еская типизация»

С��айд 7: GDK – JDK на стероидах

Все чего ��ам не х����тал�� в с��андар������к классах JDK – все это ��������ть в Groovy Development Kit
А в��его, ч��го нет �� нем ����� мо��ет�� добавить са��и.
Прич����м можно на����р��мер добавить м����од в final класс, на����риме�� String

����а������ 8: Groovy Builder-ы – П����мер – Код

Хочет��я сразу о����������������метить что реали������ция попул��рных Design Patterns, на Groovy кодируется ����стато��но просто и красиво.
Но та�� как Groovy реализуе�� паттерн�� Builder и Composition – ��авер��ое не може�� ни один язык!
В Groovy есть спе������альная сущность Builder – ������������орая позволяет ст��оить сложныее ��ера��хическ��е структуры путе�� вложения ����лок��в кода оди���� в д��у��ой. (уууу… ��к����ал так ��ак сказал)

Сразу пок��ж���� пример как с п��������мо����ью Groovy MarkupBuilder можно можно сформировать Xml.
Обратите внимание на ������, ��то внутри иера��х����ческ��й структуры я мо��у п����ат�� абсолютно л��бой Groovy-ко��. Cм��треть та�� где выбе��ено 10. times {}
И в������т что п��������у����им в ������зу��ьтат����������:

Сла���� 9: Groovy Builder-ы – Пример – Р��зул��та����

Также, поскольку я нигде, кроме п����вой строки не указывал ��т�� на ����ходе будет XML, путем з��мены
MarkupBuilder н�� какой ��ибудь JSONBuilder ��� мо��ем получить эт�� же с��ру��т����у в JSON-пред��тавлении.

Слайд 10: Groovy Builder-ы – их есть…

В��обще б��л����еро�� в Groovy достаточно много, из ни�� в с��а��д����ртной поставке толь������ штук 7-8, если н�� больш����.
Примеры: XHTML, JSON, XML, ANT, Swing, SWT, и даже Hibernate Criteria Builder-ы

Сл��й�� 11: Что ещё может Groovy?

GPath – это воз����ожно��ть использовать XPath-выраже��ия д��я ��ав��гации по ко������озициям обьектов.
Очень удобн�� выполнять на результат���� п��������с������������������������нг�� XML ��� получается така���� себе native-поддержка XML на уровне ��зыка. ��очти так ������ как ��ане�� хотели сде����т�� в Java 7.
Н����в��рн����е эт�� воз��ож��ость с��оило отн��сти к рас��ире��ным возмо��ностям син������кс��с�� языка.

Extended Xml processing ��� то о ��е�������� я только что го����ори��. ������бо����ть с XML в Groovy ��� э��о удовольствие.
Лично я к��гда-то начал и����ользьзова������ь Groovy толь���� из-за того, что на��оело писать код дл�� JDOM и xml4j

Groovy SQL – э��о бо��������е абстрак��ное р��с��ирение ��нтерфейсов JDBC ����� существенно сокращ��е�� количество к������да необходимого для полноценной р��б��ты с SQL-����з��������и д��нных.

В��т����ое����н����������й Ant – именно ��аки есть, в Groovy-встро��н Ant c небольшим п��дмн��ж������ст�������� TASK-ов.
Эт�� позволя��т пря��о из Groovy-кода созда��ь и вып��лни����ь екземпляр ��юб��го TASK-а.
С��м���� ��ростой п��им������р ��� как из Groovy отправить почт����ое сообщ��ние?
Р��шени�� – создаем э������������ем�������� Ant и ��ызываем на нем мето�� mail().

Grapplet – эта эксп����р������ен��а��ь��ая во����ожность появ����ас�� совсем ��еда��но усилиями одн����о разр��ботчика из Oracle.
Она поз��о��я��т использов��ть выполнять Groovy-код ��рямо в ��раузере. Вмес���� JavaScript.
Правда для этого на страницу нужн�� включить небольшой Applet.

Groovlet , GSP , RESTlet ����� буд��т интересны те����, кто разрабатывает web-приложен������я.
Он�������� реа��изуют возможн��ст���������� исполнять Groovy-код в рамках Servlet-ов, JSP, RESTLet-ов
����акже web-developer-а�� стоит взлянуть на более компле��сны�� Grails Framework – там уже все придум��но до вас :)

XML – RPC & GroovyWS & Gdata & Jabber RPC – Подд����ржка WebServices - ����амая моя нелю������а�� часть разр��ботки приложен��й.
Знали ��ы вы, кколько в свое вр��м���� сил, я тратил на самый ��ростой SOAP-вызо��, или на с��мый элем��нтарный SOAP-сервер. ��еперь все это можно делать �� 3-4 строки кода – почти к��к в Java6.

GroovyMock & JUnit & TestNG – ��олноце��н��я поддержк�� тестирования и test-framework-ов ��ак модульных так и функциональных.
Стоит сразу заметить что изна����аль����о Groovy б��л ��оздан ��ля нап��сания н��бол������х тестов, и толь��о потом уж�������� развился в универсальный и����струмент

П����д������ржк�� JSR 223: Scripting for the Java Platform – позволяет станда��т����ированным оьразом инте��риров��ть Groovy в Java приложение в качестве ScriptEngine.

С помощью Groovy Scriptom Groovy можно испо����ьзов��ть для напис��ни�� Windows Scripts.
������п������имер для ма����ро����с����в дл�� Microsoft Office или Microsoft Outlook.

Слайд 12: Инстру����н������а��ьн���� поддер��ка

Вроде как п����ошли те времена когд�� ��юд�� писали код в Notepad-е.
����ак вот Groovy поддерживается б��льш��нст��ом современных IDE и Редакторов
(зачитат�� со слайда)

Слайд 13: Идеологическая поддержка

Зачитывать нав��ан�������� ком��аний, думаю буд���� л��ш��им.
Единственное, о чем стоит расскахать – э���� о компани G2One
Она б��л�� создана всего около полуг��д�� назад и пока ����стои�� из 3х (ил�� 4х) основат��лей с��еди кото��ых Project Manager п��оекта Groovy, идио����ог и главный разработчик Grails, ….
Все они до того за��и��али руководящие ����е��нические должнос��и в компаниях с миро��ым име��ем JetBrains, Oracle. Эт�� ������������ себе Zend д��я PHP – жить не меша��т, но ещё и ����ньг���� зараба��ывае��.
Как ��ид��о Groovy давно перестал быт���� ����оделкой-на-коленке и стал ещ���� одним в��������������о��л��������м инструментом ра��ра����отчи��а.
С выходом версии 1.5 было внесено очень много изменени�� с��язанных с поддержкой возм����жностей

Слайд 14 :Чем завер��ить?

Дол��о думал чем зак��нчить этот краткий экскурс не п��ид����ал ничего кроме как немног�� перефразировав, процитировать одного моего друга :
То, что ���� делал на Java за 3 часа, �� Groovy я ��ела�� пол-ч��са, а потом 2.5 часа ��������юбу��с�� и думаю как это ����делать ещ�� элегатн��е �� красивее (c)
От себя добавлю л��шь то, что разраб��������к���� на Groovy – лично м����я вводит в такую ����же ��ыло ��аб��ту�� пр��граммерскую ����йфорию от написания ��ода.

Спасибо за внимание.
Во��росы?

Слайд: Вопросы?


Комментариев: 4

4 Responses to “Презентация: Groovy – другой взгляд на Java”

Комментарии:

  1. koder

    если только по делу то

    > Что ещё немаловажно, так это то, что Groovy – это не
    > скриптовый интепретируемый язык, какими являются JPython,
    > JRuby, BeanShell.
    > При выполнении Groovy-код компилируется в JVM баткод, и
    > только после этого исполняется.

    JPython давно умер, по его поводу сказать ничего не могу, а
    вот его наследник – Jython точно так-же компилируется в JVM byte-code и ровно так-же интегрируется с Java, как и Groovy.

    > – так вот я уверен что Groovy тоже так может
    Много в чем можно быть уверенным, хотелось бы примеров )).

  2. Vadim Voituk

    Спасибо, будем знать.

  3. stokito

    Большое спасибо, отличная презентация!
    Также я рекомендую отличный доклад «Быть в 10 раз эффективнее благодаря Groovy» Евгения Компаниеца http://jeeconf.com/program/groovy/