16 stycznia 2009

Relacja z pierwszych rozdziałów Beginning Groovy and Grails: From Novice to Professional

Zabrałem się za książkę Beginning Groovy and Grails: From Novice to Professional. Przy lekturze specyfikacji EJB 3.0 przekonałem się, że relacje z jej lektury na blogu, przykłady, wykłady/prezentacje w obu rolach, jako mówiący i słuchający, rozmowy z zainteresowanymi, odpowiedzi na grupach i tak w kółko to najlepszy sposób na dogłębne poznanie tematu. Zauważyłem również, że to właśnie publiczne relacje i prezentacje były odpowiedzialne za utrzymanie tempa rozpoznawania tematu EJB 3.0. Powinno sprawdzić się również przy Grails. Nie inaczej zamierzam podejść do Groovy & Grails. Pierwsze rozdziały książki niejednokrotnie kończyły się "ochami" i "echami", i nie ukrywam, że poddałem się euforii języków skryptowych i ich możliwości. W tym przypadku jest to Groovy, ale pewnie nie inaczej byłoby z JRuby (przyszło mi pracować swego czasu z Jythonem i nie zrobił on na mnie takiego wrażenia). Jedno, co mnie martwi to brak możliwości wykorzystania możliwości Grails w publicznej odsłonie - brakuje hostingu. Podobnie jak sprawa hostingu aplikacji javowych. Generalnie posucha w Polsce i co bardziej zaradni migrują na serwery zachodnie. Coś należałoby w tej materii zdziałać, bo nie wierzę, że nie ma zainteresowania firm hostujących dodatkowym zarobkiem w nowym segmencie rynku hostingowego. Przytłacza wszechobecność rozwiązań LAMP (Linux+Apache Web Server+MySQL+PHP), a tak niewiele ofert javowych. To powinno być zadanie #1 dla wszystkich polskich JUGów, aby wesprzeć inicjatywy lokalnych firm hostujących. Może jakaś firma hostująca umożliwiłaby próby za niewielką opłatą? Chętnie skorzystam i poreklamuję oferenta ;-)

Pierwszy rozdział książki "Introduction to Groovy" to opis instalacji Groovy i poznanie niektórych jego cech na przykładzie migracji klasy javowej z main na odpowiednik w Groovy. Niewiele do relacji, a dodatkowo można go przeczytać samodzielnie. Po prostu jest dostępny bezpłatnie - Ch. 01 - Introduction to Groovy. Pierwsza cenna wiedza jaka płynie z tego rozdziału to taka, że wszyscy programujący w Javie są programistami Groovy. Wystarczy po prostu zmienić rozszerzenie dowolnej klasy javowej na .groovy i uruchomić przez interpreter groovy. Jednak to dopiero początek. Podobnie jak w Javie import java.lang.* jest domyślny, tak w Groovy domyślnie importowane pakiety to java.lang.*, java.util.*, java.net.*, java.io.*, groovy.lang.* oraz groovy.util.*. Pojawiła się wzmianka o GString, który za pomocą ${obiekt.pole} pobiera wartość do pola obiektu. Ciekawym porównaniem słabego typowania w Groovy jest tzw. "duck typing", tj. automatyczne rozpoznawanie typu obiektu na podstawie jego zachowania - jeśli chodzi się jak kaczka (ang. duck) i wydaje głos jak kaczka, to musi być kaczką. Po raz pierwszy można spotkać niejawne użycie domknięć w konstrukcji .each{}. Dla uczących się angielskiego, szczególnie 3rd conditional, warto zwrócić uwagę na ostatne zdanie w rozdziale (zaraz przed Summary):

If we had started with the Groovy idioms to begin with, the Groovy approach would have been much more productive.

Kolejny rozdział "Groovy Basics" to przegląd języka. Możnaby zaliczyć go do kwintesencji specyfikacji języka, ale od czasu do czasu pojawiają się ciekawostki w formie przykładów. Zdecydowanie nie warto przechodzić do kolejnych rozdziałów bez jego lektury, aczkolwiek zapewne wielu doświadczy zawiłości^H^H^Hodmienności języka Groovy już podczas pracy z nim. Ważne - skrypt Groovy można skompilować do postaci klasy javowej z użyciem kompilatora groovyc (odpowiednik javowego javac). Następnie uruchomienie tak skompilowanego skryptu Groovy następuje jak każda inna klasa z java z podaniem biblioteki Groovy - embeddable/groovy-all-*.jar. Pojawił się przykład połączenia klasy w Javie z Groovy i tutaj "zwykłe" javowe IDE nie ma szans - koniecznie musi być wsparcie dla typów definiowanych w Groovy, aby można było bez komplikacji z nich korzystać w silnietypowanych klasach javowych. Konwencją Groovy jest zawsze zwracanie wyniku działania metod. Pojawił się przykład z assert w Groovy, który ma składnię dokładnie jak w Javie, a jego wprowadzenie było wymuszone przez udostępnienie w nim użycia możliwości Groovy - konstrukcji, które nie są znane assert w Javie. Dodatkowo assert zwraca warunek w komunikacie przy jego niespełnieniu (false). Następnie autorzy przeszli do typu znakowego - w cudzysłowach, pojedyńczych cudzysłowach i (inaczej niż w Javie) ukośnikach zwanych "slashy strings" (cięte ciągi? - a może po prostu cięgi). W ciętych ciągach niekonieczne jest używanie wstecznych ukośników do pozbycia się specjalnego znaczenia specjalnych symboli, np. $, poza samym ukośnikiem. Poza ciągami z pojedyńczymi cudzysłowami korzysta się z konstrukcji ${obiekt.pole} (czego nie ma w Javie). Można również tworzyć wielolinijkowe ciągi przy pomocy potrójnych cudzysłowów lub pojedyńczych cudzysłowów. Kolejna odmiana od Javy. I w końcu przychodzi pora na domknięcia (ang. closures). Nigdy do końca nie mogłem zrozumieć ich siły, ale mam to już za sobą - w końcu dostrzegłem ich zalety. Domknięcie jest blokiem z pewną liczbą konstrukcji językowych Groovy, który można przypisać do pola, zmiennej lub przekazać jako parametr metody. Szukając analogi do Javy, to jest to metoda bez nazwy i zwracanego typu, tj. samo ciało metody między nawiasami klamrowymi. Podobnie jak definiujemy metodę w Javie i możemy ją wykorzystywać w wielu miejscach, podobnie jest z domknięciami w Groovy. Domknięcie jest obiektem, a metoda nie. Jeśli domknięcie nie przyjmuje parametrów należy używać nawiasów, a przy podaniu parametrów nie są konieczne. Domknięcie może korzystać ze zmiennych w zasięgu (widocznych dla) jego definicji. Domyślnym parametrem dostępnym w domknięciu jest it. Po przykłady zapraszam do książki (albo należy uzbroić się w cierpliwość, bo zapewne niebawem pojawią się i u mnie). Później opisane są kolekcje, o których w następnej odsłonie. Książka zapowiada się niezwykle ciekawie.

Dla zainteresowanych wsparciem (moralnym) blogera nadmienię, że blog wystartował w konkursie Blog Roku 2008, który wszedł w etap II - nominowania blogów. Oddajemy głos na Notatnik przez wysłanie SMSa o treści B00204 (czytaj: be-zero-zero-dwa-zero-cztery) pod numer 7144. I tyle! Ja już wysłałem ;-) Zgodnie z informacją na stronie konkursu koszt SMSa to 1,22PLN brutto. Więcej formalności w Ogólne zasady tegorocznej edycji. Ciekawym jakim zainteresowaniem cieszy się Notatnik?!