piątek, 25 lipca 2008

Groovy w praktyce - part 1 - instalacja i String

Wymagania wstępne
Java, najlepiej >=1.5. Na 1.4 będzie działać, ale bez niektórych opcji.

Instalacja - Linux

Ewentualnie wszelkie pliki można dostać tu http://groovy.codehaus.org/Download w tym uniwersalny instalator i paczki dla innych dystrybucji.

Instalacja - Windows
Instalator Groovy 1.5.6 + Gant 1.3

Test
Po przeprowadzeniu instalacji pora przetestować GroovyConsole. W Windows powinna pojawić się pozycja w menu star. W obu systemach w linii komend powinno wystarczyć wpisanie groovyConsole, by włączyła się poniższa aplikacja. Wpisujemy w górną część print "Hello world" i klikamy zaznaczony przycisk:
GroovyConsole jest najprostszym edytorem Groovy, cały kod w edytorze / pliku jest wykonany, a rezultat zwracany.
W Windows kliknięcie na plik z rozszerzeniem .groovy powoduje ich wykonanie. Jak widać Groovy nie wymaga by kod był pisany w metodach.

Linia komend - groovyc
Kompilator, na razie nie będzie potrzebny.

Linia komend - groovy
Interpreter.
  • groovy Hello.groovy - wykonuje kod z podanego pliku
  • groovy -e " print 'Hello world' " - wykonuje bezpośrednio podany kod
Linia komend - groovysh
Interaktywny interpreter.
Interaktywny interpreter to ciekawa pomoc w nauce dostępna w językach takich jak Groovy, Ruby czy Python. A działa to tak:

kk@kkl:~$ groovysh
Groovy Shell (, JVM: 10.0-b22)
Type 'help' or '\h' for help.
-------------------------------------------------------------------------------
groovy:> a = "123" [enter]
===> 123
groovy:> b = 4
===> 4
groovy:> c = 5.0
===> 5.0
groovy:> a+b+c
===> 12345.0
groovy:> "$c - ${b} = ${c-b}"
===> 5.0 - 4 = 1.0 //to jest String !
W interpreterze możemy na bierząco tworzyć zmienne (nawet bez ich deklaracji) i przypisywać im dowolne wartości. Po każdej komendzie lub zestawie komend interpreter wykonuje kod i zwraca wynik. Wynikiem jest zawsze wartość ostaniej komendy.
Dla komendy 1 będzie to 1, dla komendy a = 1 będzie to 1, dla komendy 1;2;3 będzie to 3 a dla komendy print 1 będzie to null (po drodze zostanie wypisane 1).

Linijka13 - GString
Jeżeli Groovy spotka w String napis postaci $nazwa_zmiennej to wstawi w jej miejsce wartość zmiennej. Jeżeli spotka ${kod} to wstawi w to miejsce wykonany kod.
Dalej Stringi można zapisywać w formie:
  • "string" lub 'string' - zwykły String
  • /C:\Windows\system / - String w którym nie trzeba używać \
  • Stringi na kilka linijek:
def s = """\
String długi na
${a[1]} linijki
"""
Ten ma dokładnie 2 znaki nowej linii.

Kod w Stringach zauważa zmiany zmiennych:
groovy:> "abcdef".each{print "  $it"}
a b c d e f===> abcdef
Zmienna it - domyślna zmienna dla funkcji iterujących - przyjmuje wartość kolejnych znaków i za każdym razem nowa wartość jest wstawiana do stringa.
groovy:> "abcde"[2..4]
===> cde
groovy:> "abcde"[2..-2]
===> cd
groovy:> "abcde"[3..0]
===> dcba

groovy:> "abcde".size()
===> 5
groovy:> "abcde".length()
===> 5

groovy:> "abcde" == "ab" + "c" + "de"
===> true

groovy:> "abcdeabcde" - "abc"
===> deabcde
Dla stringów zdefiniowano kilka ciekawych operatorów i funkcji.
Operator == porównuje względem wartości, a nie referencji jak w Java.
Groovy dekoruje istniejące klasy Java (jak string, tablice, kolekcje) dzięki czemu można wszędzie używać jednej metody size() zamiast raz size, a raz length.
Stringi można też odejmować - zostaje usunięte pierwsze wystąpienie odejmowanego napisu.

Dodatkowe informacje o String w Groovy.

1 komentarz:

Jacek Laskowski pisze...

Ach ten size() - to dlatego wczoraj mi "poszło" "ciąg znaków".size(), kiedy to w Javie nie ma size(). Przez moment myślałem, jak to zadziałało, ale później machnąłem ręką myśląc sobie, że to jakieś voodoo w Groovy'm. Teraz już mam odpowiedź.