SlideShare une entreprise Scribd logo
1  sur  177
Télécharger pour lire hors ligne
.
                                        Na Jawie Frapujący
                                   Czyli Grooviego zarys wabiący.
.

                                         Filip „Filus” Pająk

                                           Szczecińska JUG


                                         20 września 2012




Filip „Filus” Pająk (Szczecińska JUG)        Na Jawie Frapujący     20 września 2012   1 / 39
Agenda



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   2 / 39
Agenda



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   2 / 39
Agenda



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   2 / 39
Agenda



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   2 / 39
Zastrzeżenia


Ograniczona Gwarancja



       Prezentacja jest dostarczona tak jak jest.
       Autor zastrzega sobie prawo do tremy.
       Autor starał się nie popełniać błędów językowych, ale nikt nie jest
       doskonały.
       Autor nie jest guru jeśli chodzi o prezentowany temat.
       Autor zastrzega sobie prawo do nieznajomości odpowiedzi na
       zadane pytanie.
       Aczkolwiek postara się nie rozmijać z rzeczywistością ;)




Filip „Filus” Pająk (Szczecińska JUG)         Na Jawie Frapujący   20 września 2012   3 / 39
Wstęp


Co teraz?



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   4 / 39
Wstęp


Groovy...




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...jest dynamicznym językiem obiektowym dla maszyny wirtualnej Javy.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...daje dodatkowe możliwości inspirowane językami takim jak Python,
Ruby czy Smalltalk.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...udostępnia cechy „nowoczesnego” programowania programistom
javy z prawie zerową krzywą nauki.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...dostarcza możliwości statycznego sprawdzania typu i statycznej
kompilacji kodu.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...wspiera DSL i inne kieszonkowe składnie, aby kod był łatwy do
czytania i utrzymania.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...ułatwia pisanie skryptów powłoki i budujących.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...zwiększa produktywność przez redukcję „szkieletowego” kodu przy
rozwijaniu aplikacji sieciowych, GUI, bazodanowych i konsolowych.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...upraszcza testowanie przez wsparcie dla testów jednostkowych i
imitowania „wprost z pudełka”




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...gładko integruje się ze wszystkimi istniejącymi klasami i bibliotekami
Javy.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Groovy...




...kompiluje się wprost do bajtkodu.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   5 / 39
Wstęp


Po co?




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   6 / 39
Wstęp


Po co?




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   6 / 39
Wstęp


Trochę historii




2003 –
James Strachan pierwszy raz wzmiankuje o projekcie.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2004 –
Opublikowana pierwsza wersja.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2006 –
Z projektu odchodzi Strachan.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2007 – styczeń
Opublikowana pierwsza „stabilna” wersja - 1.0.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2007 – grudzień
Opublikowana wersja - 1.5 (1.1).




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2009 – luty
Opublikowana wersja - 1.6.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2009 – grudzień
Opublikowana wersja - 1.7.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2011 – kwiecień
Opublikowana wersja - 1.8.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2012 – czerwiec
Opublikowana wersja - 2.0 (1.9).




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2013 –
Planowana wersja - 3.0




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Trochę historii




2014 –
Planowana wersja - 4.0.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   7 / 39
Wstęp


Ekosystem




W skład ekosystemu Grooviego wchodzą:
       Język.
       Groovy JDK (GDK).
       Biblioteki.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   8 / 39
Wstęp


Ekosystem




W skład ekosystemu Grooviego wchodzą:
       Język.
       Groovy JDK (GDK).
       Biblioteki.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   8 / 39
Wstęp


Ekosystem




W skład ekosystemu Grooviego wchodzą:
       Język.
       Groovy JDK (GDK).
       Biblioteki.




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   8 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Wstęp


Podstawowe informacje


       Składnia w dużej mierze identyczna ze składnią Javy.
       Operator == oznacza równość, nie identyczność.
       Każda operacja zwraca jakąś wartość.
       Słowo kluczowe return nie jest wymagane.
       Wszystkie wyjątki obsługiwane jak RuntimeException w Javie.
       Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu
       argumentów funkcji ani kropki w łańcuchach wywołań.
       Można definiować więcej niż jedną klasę publiczną na plik
       źródłowy.
       Możliwe jest stosowanie aliasów do importowanych typów (as).



Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   9 / 39
Zaczynamy


Co teraz?



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   10 / 39
Zaczynamy


Skrypty




       Skrypt – kod zapisany bezpośrednio w pliku bez deklaracji klas i
       metod.
       Możliwe łączenie kodu skryptu z kodem klas w ramach jednego
       pliku.
       Skrypt to tak naprawdę metoda statyczna main() klasy o nazwie
       jak plik źródłowy skryptu.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   11 / 39
Zaczynamy


Skrypty




       Skrypt – kod zapisany bezpośrednio w pliku bez deklaracji klas i
       metod.
       Możliwe łączenie kodu skryptu z kodem klas w ramach jednego
       pliku.
       Skrypt to tak naprawdę metoda statyczna main() klasy o nazwie
       jak plik źródłowy skryptu.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   11 / 39
Zaczynamy


Skrypty




       Skrypt – kod zapisany bezpośrednio w pliku bez deklaracji klas i
       metod.
       Możliwe łączenie kodu skryptu z kodem klas w ramach jednego
       pliku.
       Skrypt to tak naprawdę metoda statyczna main() klasy o nazwie
       jak plik źródłowy skryptu.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   11 / 39
Zaczynamy


Modyfikatory



       Dopuszczone modyfikatory takie jak w javie.
       Domyślnym modyfikatorem jest modyfikator public dla metod i
       klas. Dla pól publiczny „w pewnym sensie”.
       Modyfikator pakietowy definiowany adnotacją @PackageScope.
       Z powodu błędu (GROOVY-3010) w mechanizmach MOP
       modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.
       Z tego samego powodu modyfikator final nie działa poprawnie
       dla zmiennych.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   12 / 39
Zaczynamy


Modyfikatory



       Dopuszczone modyfikatory takie jak w javie.
       Domyślnym modyfikatorem jest modyfikator public dla metod i
       klas. Dla pól publiczny „w pewnym sensie”.
       Modyfikator pakietowy definiowany adnotacją @PackageScope.
       Z powodu błędu (GROOVY-3010) w mechanizmach MOP
       modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.
       Z tego samego powodu modyfikator final nie działa poprawnie
       dla zmiennych.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   12 / 39
Zaczynamy


Modyfikatory



       Dopuszczone modyfikatory takie jak w javie.
       Domyślnym modyfikatorem jest modyfikator public dla metod i
       klas. Dla pól publiczny „w pewnym sensie”.
       Modyfikator pakietowy definiowany adnotacją @PackageScope.
       Z powodu błędu (GROOVY-3010) w mechanizmach MOP
       modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.
       Z tego samego powodu modyfikator final nie działa poprawnie
       dla zmiennych.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   12 / 39
Zaczynamy


Modyfikatory



       Dopuszczone modyfikatory takie jak w javie.
       Domyślnym modyfikatorem jest modyfikator public dla metod i
       klas. Dla pól publiczny „w pewnym sensie”.
       Modyfikator pakietowy definiowany adnotacją @PackageScope.
       Z powodu błędu (GROOVY-3010) w mechanizmach MOP
       modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.
       Z tego samego powodu modyfikator final nie działa poprawnie
       dla zmiennych.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   12 / 39
Zaczynamy


Modyfikatory



       Dopuszczone modyfikatory takie jak w javie.
       Domyślnym modyfikatorem jest modyfikator public dla metod i
       klas. Dla pól publiczny „w pewnym sensie”.
       Modyfikator pakietowy definiowany adnotacją @PackageScope.
       Z powodu błędu (GROOVY-3010) w mechanizmach MOP
       modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.
       Z tego samego powodu modyfikator final nie działa poprawnie
       dla zmiennych.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   12 / 39
Zaczynamy


Definicje



        Definiowanie klas, interfejsów, pól i metod praktycznie tak jak w
        Javie.
        Nie jest wymagane podawanie wszystkich modyfikatorów.

Przykład
public class Klasa extends InnaKlasa implements Interfejs {
    private def pole;
    public final String polePubliczne = ...;
    public String metoda(Object arg1) {
        ...
    }
}




Filip „Filus” Pająk (Szczecińska JUG)              Na Jawie Frapujący   20 września 2012   13 / 39
Zaczynamy


Definicje



        Definiowanie klas, interfejsów, pól i metod praktycznie tak jak w
        Javie.
        Nie jest wymagane podawanie wszystkich modyfikatorów.

Przykład
class Klasa extends InnaKlasa implements Interfejs {
    private pole;
    final String polePubliczne = ...;
    String metoda(Object arg1) {
        ...
    }
}




Filip „Filus” Pająk (Szczecińska JUG)             Na Jawie Frapujący   20 września 2012   13 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Prawda


Prawdą w Groovy jest:
       Wartość true dla wyrażeń logicznych (w tym typu Boolean).
       Niezerowa wartość dla typów numerycznych.
       Niepusty łańcuch.
       Niepusta kolekcja lub mapa.
       Iterator lub enumeracja wskazująca na następny element.
       Referencja obiektu nie będąca wartością null.
       Obiekt o wartości true zwracanej przez metodę asBoolean().




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   14 / 39
Zaczynamy


Łańcuchy


W Groovy mamy pięć rodzajów łańcuchów:
       Zwykły łańcuch, zapisywany w ’uszach’.
       Zwykły łańcuch, zapisywany w /ukośnikach/
       GString zapisywany w ”cudzysłowie”.
       Wariant wielowierszowy zapisu w uszach.
       Wariant wielowierszowy zapisu w cudzysłowie.

Przykład
def string = ’Zwykły łańcuch’




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   15 / 39
Zaczynamy


Łańcuchy


W Groovy mamy pięć rodzajów łańcuchów:
       Zwykły łańcuch, zapisywany w ’uszach’.
       Zwykły łańcuch, zapisywany w /ukośnikach/
       GString zapisywany w ”cudzysłowie”.
       Wariant wielowierszowy zapisu w uszach.
       Wariant wielowierszowy zapisu w cudzysłowie.

Przykład
def string = /Zwykły łańcuch/




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   15 / 39
Zaczynamy


Łańcuchy


W Groovy mamy pięć rodzajów łańcuchów:
       Zwykły łańcuch, zapisywany w ’uszach’.
       Zwykły łańcuch, zapisywany w /ukośnikach/
       GString zapisywany w ”cudzysłowie”.
       Wariant wielowierszowy zapisu w uszach.
       Wariant wielowierszowy zapisu w cudzysłowie.

Przykład
def string = ”Łańcuch GString”




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   15 / 39
Zaczynamy


Łańcuchy


W Groovy mamy pięć rodzajów łańcuchów:
       Zwykły łańcuch, zapisywany w ’uszach’.
       Zwykły łańcuch, zapisywany w /ukośnikach/
       GString zapisywany w ”cudzysłowie”.
       Wariant wielowierszowy zapisu w uszach.
       Wariant wielowierszowy zapisu w cudzysłowie.

Przykład
def string = ”’Zwykły łańcuch
wielowierszowy”’



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   15 / 39
Zaczynamy


Łańcuchy


W Groovy mamy pięć rodzajów łańcuchów:
       Zwykły łańcuch, zapisywany w ’uszach’.
       Zwykły łańcuch, zapisywany w /ukośnikach/
       GString zapisywany w ”cudzysłowie”.
       Wariant wielowierszowy zapisu w uszach.
       Wariant wielowierszowy zapisu w cudzysłowie.

Przykład
def string = ”””Łańcuch GString
wielowierszowy”””



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   15 / 39
Zaczynamy


Wartości numeryczne



       Wartości numeryczne są obiektami.
       Domyślnie używane są typy Integer i BigDecimal.
       Przy operacjach dodawania, odejmowania i mnożenia wynik jest
       tego samego typu co „największy” typ użytych operandów.
       Chyba, że jednym z operandów jest typu Float lub Double. Wtedy
       wynik jest typu Double.
       Przy operacji dzielenia wynik jest typu Double lub BigDecimal.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   16 / 39
Zaczynamy


Wartości numeryczne



       Wartości numeryczne są obiektami.
       Domyślnie używane są typy Integer i BigDecimal.
       Przy operacjach dodawania, odejmowania i mnożenia wynik jest
       tego samego typu co „największy” typ użytych operandów.
       Chyba, że jednym z operandów jest typu Float lub Double. Wtedy
       wynik jest typu Double.
       Przy operacji dzielenia wynik jest typu Double lub BigDecimal.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   16 / 39
Zaczynamy


Wartości numeryczne



       Wartości numeryczne są obiektami.
       Domyślnie używane są typy Integer i BigDecimal.
       Przy operacjach dodawania, odejmowania i mnożenia wynik jest
       tego samego typu co „największy” typ użytych operandów.
       Chyba, że jednym z operandów jest typu Float lub Double. Wtedy
       wynik jest typu Double.
       Przy operacji dzielenia wynik jest typu Double lub BigDecimal.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   16 / 39
Zaczynamy


Wartości numeryczne



       Wartości numeryczne są obiektami.
       Domyślnie używane są typy Integer i BigDecimal.
       Przy operacjach dodawania, odejmowania i mnożenia wynik jest
       tego samego typu co „największy” typ użytych operandów.
       Chyba, że jednym z operandów jest typu Float lub Double. Wtedy
       wynik jest typu Double.
       Przy operacji dzielenia wynik jest typu Double lub BigDecimal.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   16 / 39
Zaczynamy


Wartości numeryczne



       Wartości numeryczne są obiektami.
       Domyślnie używane są typy Integer i BigDecimal.
       Przy operacjach dodawania, odejmowania i mnożenia wynik jest
       tego samego typu co „największy” typ użytych operandów.
       Chyba, że jednym z operandów jest typu Float lub Double. Wtedy
       wynik jest typu Double.
       Przy operacji dzielenia wynik jest typu Double lub BigDecimal.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   16 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Tablice, listy, mapy…

       Domyślnie zamiast tablic używane są listy i mapy.
       Do zapisu list stosuje się notację [ wartość1, wartość2, …].
       Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić,
       że to tablica.
       Do zapisu map stosuje się notację [ klucz1 : wartość1,
       klucz2 : wartość2, …].
       Specjalnym rodzajem listy są zakresy (Range).
       Dostęp do elementów poprzez wskazanie indeksu lub klucza w
       nawiasach kwadratowych.
       Indeksy mogą być ujemne, oraz mogą być zakresami.
       W przypadku map możliwe użycie klucza jako nazwy pola.


Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   17 / 39
Zaczynamy


Instrukcje warunkowe



       Składnia instrukcji if - else identyczna jak w Javie.
       Składnia instrukcji switch - case również identyczna.
       Aczkolwiek parametrem dla case może być dowolny obiekt mający
       metodę isCase(switchValue).
       Oprócz wyrażenia warunkowego
       warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje
       operator Elvisa: (warunek)?:wartośćDlaFałszu




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   18 / 39
Zaczynamy


Instrukcje warunkowe



       Składnia instrukcji if - else identyczna jak w Javie.
       Składnia instrukcji switch - case również identyczna.
       Aczkolwiek parametrem dla case może być dowolny obiekt mający
       metodę isCase(switchValue).
       Oprócz wyrażenia warunkowego
       warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje
       operator Elvisa: (warunek)?:wartośćDlaFałszu




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   18 / 39
Zaczynamy


Instrukcje warunkowe



       Składnia instrukcji if - else identyczna jak w Javie.
       Składnia instrukcji switch - case również identyczna.
       Aczkolwiek parametrem dla case może być dowolny obiekt mający
       metodę isCase(switchValue).
       Oprócz wyrażenia warunkowego
       warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje
       operator Elvisa: (warunek)?:wartośćDlaFałszu




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   18 / 39
Zaczynamy


Instrukcje warunkowe



       Składnia instrukcji if - else identyczna jak w Javie.
       Składnia instrukcji switch - case również identyczna.
       Aczkolwiek parametrem dla case może być dowolny obiekt mający
       metodę isCase(switchValue).
       Oprócz wyrażenia warunkowego
       warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje
       operator Elvisa: (warunek)?:wartośćDlaFałszu




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   18 / 39
Zaczynamy


Pętle




       Instrukcja while identyczna jak w Javie.
       Działają wszystkie formy instrukcji for znane z Javy.
       Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa
       kluczowego in do iteracji po kolekcjach, mapach, tablicach.
       Brak pętli do...while.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   19 / 39
Zaczynamy


Pętle




       Instrukcja while identyczna jak w Javie.
       Działają wszystkie formy instrukcji for znane z Javy.
       Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa
       kluczowego in do iteracji po kolekcjach, mapach, tablicach.
       Brak pętli do...while.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   19 / 39
Zaczynamy


Pętle




       Instrukcja while identyczna jak w Javie.
       Działają wszystkie formy instrukcji for znane z Javy.
       Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa
       kluczowego in do iteracji po kolekcjach, mapach, tablicach.
       Brak pętli do...while.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   19 / 39
Zaczynamy


Pętle




       Instrukcja while identyczna jak w Javie.
       Działają wszystkie formy instrukcji for znane z Javy.
       Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa
       kluczowego in do iteracji po kolekcjach, mapach, tablicach.
       Brak pętli do...while.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   19 / 39
Zaczynamy


Domknięcia



Definicja
Domknięcie – w metodach realizacji języków programowania jest to
obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać.

       Blok kodu zawarty w nawiasach klamrowych przypisany (może być
       niejawnie) do literału.
       Może być również użyta metoda danego obiektu za pomocą
       operatora .&.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   20 / 39
Zaczynamy


Domknięcia



Definicja
Domknięcie – w metodach realizacji języków programowania jest to
obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać.

       Blok kodu zawarty w nawiasach klamrowych przypisany (może być
       niejawnie) do literału.
       Może być również użyta metoda danego obiektu za pomocą
       operatora .&.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   20 / 39
Zaczynamy


Domknięcia



Definicja
Domknięcie – w metodach realizacji języków programowania jest to
obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać.

       Blok kodu zawarty w nawiasach klamrowych przypisany (może być
       niejawnie) do literału.
       Może być również użyta metoda danego obiektu za pomocą
       operatora .&.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   20 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Operatory


       Groovy wprowadza przeciążanie operatorów.
       oraz kilka tychże nowych względem javy:
 **           potęgowanie                   <=>              porównanie
 .@          dostęp do pola                  .&           referencja metody
 ?:                Elvis                     ?.        bezpieczne nawigowanie
 *.             rozpiętość                  *.@          rozpiętość po polach
 =~       znalezienie wyrażenia             ==~        dopasowanie wyrażenia
               regularnego                                   regularnego
 as             rzutowanie                  in                zawieranie
 is           identyczność



Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący         20 września 2012   21 / 39
Zaczynamy


Groovy Beans




       W praktyce każdy obiekt w Groovy jest ziarnem (bean).
       Właściwości (Properties) ziaren okraślane przez metody
       set/get/is....
       Autokreacja właściwości przez deklarację pól.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   22 / 39
Zaczynamy


Groovy Beans




       W praktyce każdy obiekt w Groovy jest ziarnem (bean).
       Właściwości (Properties) ziaren okraślane przez metody
       set/get/is....
       Autokreacja właściwości przez deklarację pól.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   22 / 39
Zaczynamy


Groovy Beans




       W praktyce każdy obiekt w Groovy jest ziarnem (bean).
       Właściwości (Properties) ziaren okraślane przez metody
       set/get/is....
       Autokreacja właściwości przez deklarację pól.




Filip „Filus” Pająk (Szczecińska JUG)       Na Jawie Frapujący   20 września 2012   22 / 39
Głębsze wody


Co teraz?



1     Wstęp

2     Zaczynamy

3     Głębsze wody

4     Koniec




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   23 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
’ala ma kota’.replaceAll(’a’, ’b’)




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
’ala ma kota’.replaceAll ’a’, ’b’




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
2.plus(2).minus(1).multiply(4)




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
2.plus 2 minus 1 multiply 4




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
def a = 10;
println a;




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
def a = 10
println a




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Łańcuch wywołań


       Nawiasy określające argumenty wywołania nie są wymagane.
       Kropki określające wywołanie metody nie są wymagane.
       Średniki na końcu linii również opcjonalne.
       Aczkolwiek czasem trzeba uważać.

Przykład
class Trial {
    private final thing = new Thing ( )
    { thing.doSomething ( ) }
}



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   24 / 39
Głębsze wody


Wyrażenia regularne




       Do zapisu wyrażeń regularnych przeznaczony łańcuch
       ukośnikowy.
       Operator ==~ sprawdza spełnianie wyrażenia regularnego.
       Operator =~ zwraca obiekt typu java.util.regex.Matcher z
       pary łańcuch i wyrażenie regularne.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   25 / 39
Głębsze wody


Wyrażenia regularne




       Do zapisu wyrażeń regularnych przeznaczony łańcuch
       ukośnikowy.
       Operator ==~ sprawdza spełnianie wyrażenia regularnego.
       Operator =~ zwraca obiekt typu java.util.regex.Matcher z
       pary łańcuch i wyrażenie regularne.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   25 / 39
Głębsze wody


Wyrażenia regularne




       Do zapisu wyrażeń regularnych przeznaczony łańcuch
       ukośnikowy.
       Operator ==~ sprawdza spełnianie wyrażenia regularnego.
       Operator =~ zwraca obiekt typu java.util.regex.Matcher z
       pary łańcuch i wyrażenie regularne.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   25 / 39
Głębsze wody


Przeciążanie operatorów




       Większośc operatorów w Groovy można przeciążyć.
       Operatory te po prostu wywołują konkretną metodę na obiekcie.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   26 / 39
Głębsze wody


Przeciążanie operatorów




       Większośc operatorów w Groovy można przeciążyć.
       Operatory te po prostu wywołują konkretną metodę na obiekcie.

Przykład
a + b ==> a.plus(b)




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   26 / 39
Głębsze wody


Przeciążanie operatorów




       Większośc operatorów w Groovy można przeciążyć.
       Operatory te po prostu wywołują konkretną metodę na obiekcie.

Przykład
a * b ==> a.multiply(b)




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   26 / 39
Głębsze wody


Przeciążanie operatorów




       Większośc operatorów w Groovy można przeciążyć.
       Operatory te po prostu wywołują konkretną metodę na obiekcie.

Przykład
a « b ==> a.leftShift(b)




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   26 / 39
Głębsze wody


Przeciążanie operatorów




       Większośc operatorów w Groovy można przeciążyć.
       Operatory te po prostu wywołują konkretną metodę na obiekcie.

Przykład
a <=> b ==> a.compareTo(b)




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   26 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      Domknięcia


Domknięcia


       Niejawnie domknięcie to obiekt klasy Closure<V>.
       Wykonywane w momencie wywołania ich metody call(), a nie w
       momencie deklaracji.
       Możliwy dostęp do właściciela (owner) lub delegata (delegate).
       Domknięcia mogą być „bejcowane” (curry(), rcurry(),
       ncurry()).
       Domknięcia mogą być składane.
       Domknięcia mogą być optymalizowane pod względem rekurencji
       (trampoline()).
       Wynik domknięć może być składowany (memoize()).



Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   27 / 39
Głębsze wody      GDK


GDK


       Rozszerza wybrane standardowe klasy javy o metody czyniące je
       bardziej „grówiowe”.
       Wśród nich są metody wspierające wewnętrzne mechanizmy
       grówiego (np. getMetaClass(), getProperties()).
       Są metody skracające użycie popularnych idiomów (np.
       println(), sleep()).
       Są metody iteracyjne (np. each(), find(), every()).
       Przeciążenia operatorów.
       Są metody ułatwiajace pracę z daną klasą.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   28 / 39
Głębsze wody      GDK


GDK


       Rozszerza wybrane standardowe klasy javy o metody czyniące je
       bardziej „grówiowe”.
       Wśród nich są metody wspierające wewnętrzne mechanizmy
       grówiego (np. getMetaClass(), getProperties()).
       Są metody skracające użycie popularnych idiomów (np.
       println(), sleep()).
       Są metody iteracyjne (np. each(), find(), every()).
       Przeciążenia operatorów.
       Są metody ułatwiajace pracę z daną klasą.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   28 / 39
Głębsze wody      GDK


GDK


       Rozszerza wybrane standardowe klasy javy o metody czyniące je
       bardziej „grówiowe”.
       Wśród nich są metody wspierające wewnętrzne mechanizmy
       grówiego (np. getMetaClass(), getProperties()).
       Są metody skracające użycie popularnych idiomów (np.
       println(), sleep()).
       Są metody iteracyjne (np. each(), find(), every()).
       Przeciążenia operatorów.
       Są metody ułatwiajace pracę z daną klasą.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   28 / 39
Głębsze wody      GDK


GDK


       Rozszerza wybrane standardowe klasy javy o metody czyniące je
       bardziej „grówiowe”.
       Wśród nich są metody wspierające wewnętrzne mechanizmy
       grówiego (np. getMetaClass(), getProperties()).
       Są metody skracające użycie popularnych idiomów (np.
       println(), sleep()).
       Są metody iteracyjne (np. each(), find(), every()).
       Przeciążenia operatorów.
       Są metody ułatwiajace pracę z daną klasą.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   28 / 39
Głębsze wody      GDK


GDK


       Rozszerza wybrane standardowe klasy javy o metody czyniące je
       bardziej „grówiowe”.
       Wśród nich są metody wspierające wewnętrzne mechanizmy
       grówiego (np. getMetaClass(), getProperties()).
       Są metody skracające użycie popularnych idiomów (np.
       println(), sleep()).
       Są metody iteracyjne (np. each(), find(), every()).
       Przeciążenia operatorów.
       Są metody ułatwiajace pracę z daną klasą.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   28 / 39
Głębsze wody      GDK


GDK


       Rozszerza wybrane standardowe klasy javy o metody czyniące je
       bardziej „grówiowe”.
       Wśród nich są metody wspierające wewnętrzne mechanizmy
       grówiego (np. getMetaClass(), getProperties()).
       Są metody skracające użycie popularnych idiomów (np.
       println(), sleep()).
       Są metody iteracyjne (np. each(), find(), every()).
       Przeciążenia operatorów.
       Są metody ułatwiajace pracę z daną klasą.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   28 / 39
Głębsze wody      GDK


Mapy i kolekcje


       Wykonujące działania na każdym elemencie (np. each(),
       eachWithIndex(), eachPermutation()).
       Sprawdzające kolekcję (mapę) (np. any(), every()
       Wyszukujące (np. find(), findAll(), findResult(),
       grep(), min()
       Agregujące (np. sum(), inject()
       Przekształcające (np. collect(), sort(), unique(),
       flatten()
       Grupujące (np. groupBy(), split())




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   29 / 39
Głębsze wody      GDK


Mapy i kolekcje


       Wykonujące działania na każdym elemencie (np. each(),
       eachWithIndex(), eachPermutation()).
       Sprawdzające kolekcję (mapę) (np. any(), every()
       Wyszukujące (np. find(), findAll(), findResult(),
       grep(), min()
       Agregujące (np. sum(), inject()
       Przekształcające (np. collect(), sort(), unique(),
       flatten()
       Grupujące (np. groupBy(), split())




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   29 / 39
Głębsze wody      GDK


Mapy i kolekcje


       Wykonujące działania na każdym elemencie (np. each(),
       eachWithIndex(), eachPermutation()).
       Sprawdzające kolekcję (mapę) (np. any(), every()
       Wyszukujące (np. find(), findAll(), findResult(),
       grep(), min()
       Agregujące (np. sum(), inject()
       Przekształcające (np. collect(), sort(), unique(),
       flatten()
       Grupujące (np. groupBy(), split())




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   29 / 39
Głębsze wody      GDK


Mapy i kolekcje


       Wykonujące działania na każdym elemencie (np. each(),
       eachWithIndex(), eachPermutation()).
       Sprawdzające kolekcję (mapę) (np. any(), every()
       Wyszukujące (np. find(), findAll(), findResult(),
       grep(), min()
       Agregujące (np. sum(), inject()
       Przekształcające (np. collect(), sort(), unique(),
       flatten()
       Grupujące (np. groupBy(), split())




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   29 / 39
Głębsze wody      GDK


Mapy i kolekcje


       Wykonujące działania na każdym elemencie (np. each(),
       eachWithIndex(), eachPermutation()).
       Sprawdzające kolekcję (mapę) (np. any(), every()
       Wyszukujące (np. find(), findAll(), findResult(),
       grep(), min()
       Agregujące (np. sum(), inject()
       Przekształcające (np. collect(), sort(), unique(),
       flatten()
       Grupujące (np. groupBy(), split())




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   29 / 39
Głębsze wody      GDK


Mapy i kolekcje


       Wykonujące działania na każdym elemencie (np. each(),
       eachWithIndex(), eachPermutation()).
       Sprawdzające kolekcję (mapę) (np. any(), every()
       Wyszukujące (np. find(), findAll(), findResult(),
       grep(), min()
       Agregujące (np. sum(), inject()
       Przekształcające (np. collect(), sort(), unique(),
       flatten()
       Grupujące (np. groupBy(), split())




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   29 / 39
Głębsze wody      GDK


Praca z plikami




Dostarczone są metody ułatwiające pracę zarówno ze strukturą plików,
jak i z ich zawartością.
Przy części z nich nie trzeba martwić się o zamykanie zasobów.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   30 / 39
Głębsze wody      GDK


Praca z plikami




Dostarczone są metody ułatwiające pracę zarówno ze strukturą plików,
jak i z ich zawartością.
Przy części z nich nie trzeba martwić się o zamykanie zasobów.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   30 / 39
Głębsze wody      Meta Object Protocol


MOP




       Meta-Object to każdy byt który manipuluje, tworzy, opisuje lub
       implementuje inne obiekty.
       Meta-Object Protocol (MOP) jest interpretatorem semantyki
       programu, który jest otwarty i elastyczny.
       Może być użyty zarówno w trakcie wykonywania, jak i kompilacji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   31 / 39
Głębsze wody      Meta Object Protocol


MOP




       Meta-Object to każdy byt który manipuluje, tworzy, opisuje lub
       implementuje inne obiekty.
       Meta-Object Protocol (MOP) jest interpretatorem semantyki
       programu, który jest otwarty i elastyczny.
       Może być użyty zarówno w trakcie wykonywania, jak i kompilacji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   31 / 39
Głębsze wody      Meta Object Protocol


MOP




       Meta-Object to każdy byt który manipuluje, tworzy, opisuje lub
       implementuje inne obiekty.
       Meta-Object Protocol (MOP) jest interpretatorem semantyki
       programu, który jest otwarty i elastyczny.
       Może być użyty zarówno w trakcie wykonywania, jak i kompilacji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   31 / 39
Głębsze wody      Meta Object Protocol


Na dzień dobry




       Dynamiczne wywoływanie metod.
       Obsługa dostępu do nieistniejącym metod (methodMissing()),
       i właściwości (propertyMissing()).
       Nadpisanie dostępu do właściwości (getProperty(),
       setProperty(),
       i wywoływania metod (invokeMethod()).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   32 / 39
Głębsze wody      Meta Object Protocol


Na dzień dobry




       Dynamiczne wywoływanie metod.
       Obsługa dostępu do nieistniejącym metod (methodMissing()),
       i właściwości (propertyMissing()).
       Nadpisanie dostępu do właściwości (getProperty(),
       setProperty(),
       i wywoływania metod (invokeMethod()).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   32 / 39
Głębsze wody      Meta Object Protocol


Na dzień dobry




       Dynamiczne wywoływanie metod.
       Obsługa dostępu do nieistniejącym metod (methodMissing()),
       i właściwości (propertyMissing()).
       Nadpisanie dostępu do właściwości (getProperty(),
       setProperty(),
       i wywoływania metod (invokeMethod()).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   32 / 39
Głębsze wody      Meta Object Protocol


Na dzień dobry




       Dynamiczne wywoływanie metod.
       Obsługa dostępu do nieistniejącym metod (methodMissing()),
       i właściwości (propertyMissing()).
       Nadpisanie dostępu do właściwości (getProperty(),
       setProperty(),
       i wywoływania metod (invokeMethod()).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   32 / 39
Głębsze wody      Meta Object Protocol


Na dzień dobry




       Dynamiczne wywoływanie metod.
       Obsługa dostępu do nieistniejącym metod (methodMissing()),
       i właściwości (propertyMissing()).
       Nadpisanie dostępu do właściwości (getProperty(),
       setProperty(),
       i wywoływania metod (invokeMethod()).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   32 / 39
Głębsze wody      Meta Object Protocol


MetaClass




       Rodzaj obiektu opisującego klasę.
       Możliwość zmiany tego opisu w trakcie działania programu.
       Zmiany mogą dotyczyć zarówno całej klasy, jak i instancji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   33 / 39
Głębsze wody      Meta Object Protocol


MetaClass




       Rodzaj obiektu opisującego klasę.
       Możliwość zmiany tego opisu w trakcie działania programu.
       Zmiany mogą dotyczyć zarówno całej klasy, jak i instancji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   33 / 39
Głębsze wody      Meta Object Protocol


MetaClass




       Rodzaj obiektu opisującego klasę.
       Możliwość zmiany tego opisu w trakcie działania programu.
       Zmiany mogą dotyczyć zarówno całej klasy, jak i instancji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   33 / 39
Głębsze wody      Meta Object Protocol


Kategorie




       Koncepcja zaczerpnięta z Objective-C.
       Umożliwia zmianę kontraktu klasy tylko wtedy, gdy tego chcemy.
       Możliwe protezowanie wielodziedziczenia (@Mixin).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   34 / 39
Głębsze wody      Meta Object Protocol


Kategorie




       Koncepcja zaczerpnięta z Objective-C.
       Umożliwia zmianę kontraktu klasy tylko wtedy, gdy tego chcemy.
       Możliwe protezowanie wielodziedziczenia (@Mixin).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   34 / 39
Głębsze wody      Meta Object Protocol


Kategorie




       Koncepcja zaczerpnięta z Objective-C.
       Umożliwia zmianę kontraktu klasy tylko wtedy, gdy tego chcemy.
       Możliwe protezowanie wielodziedziczenia (@Mixin).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   34 / 39
Głębsze wody      Meta Object Protocol


Transformacje AST




       MOPowanie w trakcie kompilacji.
       Realizowane poprzez anotacje.
       Wraz z językiem dostarczana jest gromadka przydatnych
       transformacji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   35 / 39
Głębsze wody      Meta Object Protocol


Transformacje AST




       MOPowanie w trakcie kompilacji.
       Realizowane poprzez anotacje.
       Wraz z językiem dostarczana jest gromadka przydatnych
       transformacji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   35 / 39
Głębsze wody      Meta Object Protocol


Transformacje AST




       MOPowanie w trakcie kompilacji.
       Realizowane poprzez anotacje.
       Wraz z językiem dostarczana jest gromadka przydatnych
       transformacji.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                20 września 2012   35 / 39
Głębsze wody


Kompilacja statyczna




       Możliwe jest wymuszenie sprawdzania typu (@TypeCheck).
       Możliwa jest kompilacja statyczna kodu (@CompileStatic).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   36 / 39
Głębsze wody


Kompilacja statyczna




       Możliwe jest wymuszenie sprawdzania typu (@TypeCheck).
       Możliwa jest kompilacja statyczna kodu (@CompileStatic).




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   36 / 39
Głębsze wody      Budowniczy


Wzorzec Budowniczy




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   37 / 39
Głębsze wody      Budowniczy


Wzorzec Budowniczy




                     Director                                          ConcreteBuilder
                                                Builder
                   builder: Builder                                    buildPart()
                                               buildPart()
                   construct()                                         getResult(): Product

                                                                                <<creates>>



                                                                            Product




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący                 20 września 2012   37 / 39
Głębsze wody      Budowniczy




       Głównie do usprawnienia obsługi struktur drzewiastych.
       Powszechnie używana w świecie Grooviego.
       Chociażby do budowania XML, GUI, DSL.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   38 / 39
Głębsze wody      Budowniczy




       Głównie do usprawnienia obsługi struktur drzewiastych.
       Powszechnie używana w świecie Grooviego.
       Chociażby do budowania XML, GUI, DSL.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   38 / 39
Głębsze wody      Budowniczy




       Głównie do usprawnienia obsługi struktur drzewiastych.
       Powszechnie używana w świecie Grooviego.
       Chociażby do budowania XML, GUI, DSL.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący      20 września 2012   38 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Głębsze wody


Co jeszcze?



       Łatwa obsługa XML …
       i SQL.
       Repozytoriów Ivy (Maven) – Grape
       Wsparcie dla równoległości – GPars
       Wsparcie testowania i imitowania – Spock, GMock
       Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy
       GAE (Gaelyk).
       I pewnie wiele innych.




Filip „Filus” Pająk (Szczecińska JUG)          Na Jawie Frapujący   20 września 2012   39 / 39
Koniec




                         To już jest koniec, nie ma już nic
                          Jesteście wolni, możecie iść!




Filip „Filus” Pająk (Szczecińska JUG)   Na Jawie Frapujący   20 września 2012   40 / 39

Contenu connexe

En vedette

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

En vedette (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Na jawie frapujący, czyli grooviego zarys wabiący

  • 1. . Na Jawie Frapujący Czyli Grooviego zarys wabiący. . Filip „Filus” Pająk Szczecińska JUG 20 września 2012 Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 1 / 39
  • 2. Agenda 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 2 / 39
  • 3. Agenda 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 2 / 39
  • 4. Agenda 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 2 / 39
  • 5. Agenda 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 2 / 39
  • 6. Zastrzeżenia Ograniczona Gwarancja Prezentacja jest dostarczona tak jak jest. Autor zastrzega sobie prawo do tremy. Autor starał się nie popełniać błędów językowych, ale nikt nie jest doskonały. Autor nie jest guru jeśli chodzi o prezentowany temat. Autor zastrzega sobie prawo do nieznajomości odpowiedzi na zadane pytanie. Aczkolwiek postara się nie rozmijać z rzeczywistością ;) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 3 / 39
  • 7. Wstęp Co teraz? 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 4 / 39
  • 8. Wstęp Groovy... Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 9. Wstęp Groovy... ...jest dynamicznym językiem obiektowym dla maszyny wirtualnej Javy. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 10. Wstęp Groovy... ...daje dodatkowe możliwości inspirowane językami takim jak Python, Ruby czy Smalltalk. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 11. Wstęp Groovy... ...udostępnia cechy „nowoczesnego” programowania programistom javy z prawie zerową krzywą nauki. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 12. Wstęp Groovy... ...dostarcza możliwości statycznego sprawdzania typu i statycznej kompilacji kodu. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 13. Wstęp Groovy... ...wspiera DSL i inne kieszonkowe składnie, aby kod był łatwy do czytania i utrzymania. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 14. Wstęp Groovy... ...ułatwia pisanie skryptów powłoki i budujących. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 15. Wstęp Groovy... ...zwiększa produktywność przez redukcję „szkieletowego” kodu przy rozwijaniu aplikacji sieciowych, GUI, bazodanowych i konsolowych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 16. Wstęp Groovy... ...upraszcza testowanie przez wsparcie dla testów jednostkowych i imitowania „wprost z pudełka” Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 17. Wstęp Groovy... ...gładko integruje się ze wszystkimi istniejącymi klasami i bibliotekami Javy. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 18. Wstęp Groovy... ...kompiluje się wprost do bajtkodu. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 5 / 39
  • 19. Wstęp Po co? Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 6 / 39
  • 20. Wstęp Po co? Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 6 / 39
  • 21. Wstęp Trochę historii 2003 – James Strachan pierwszy raz wzmiankuje o projekcie. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 22. Wstęp Trochę historii 2004 – Opublikowana pierwsza wersja. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 23. Wstęp Trochę historii 2006 – Z projektu odchodzi Strachan. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 24. Wstęp Trochę historii 2007 – styczeń Opublikowana pierwsza „stabilna” wersja - 1.0. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 25. Wstęp Trochę historii 2007 – grudzień Opublikowana wersja - 1.5 (1.1). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 26. Wstęp Trochę historii 2009 – luty Opublikowana wersja - 1.6. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 27. Wstęp Trochę historii 2009 – grudzień Opublikowana wersja - 1.7. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 28. Wstęp Trochę historii 2011 – kwiecień Opublikowana wersja - 1.8. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 29. Wstęp Trochę historii 2012 – czerwiec Opublikowana wersja - 2.0 (1.9). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 30. Wstęp Trochę historii 2013 – Planowana wersja - 3.0 Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 31. Wstęp Trochę historii 2014 – Planowana wersja - 4.0. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 7 / 39
  • 32. Wstęp Ekosystem W skład ekosystemu Grooviego wchodzą: Język. Groovy JDK (GDK). Biblioteki. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 8 / 39
  • 33. Wstęp Ekosystem W skład ekosystemu Grooviego wchodzą: Język. Groovy JDK (GDK). Biblioteki. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 8 / 39
  • 34. Wstęp Ekosystem W skład ekosystemu Grooviego wchodzą: Język. Groovy JDK (GDK). Biblioteki. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 8 / 39
  • 35. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 36. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 37. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 38. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 39. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 40. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 41. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 42. Wstęp Podstawowe informacje Składnia w dużej mierze identyczna ze składnią Javy. Operator == oznacza równość, nie identyczność. Każda operacja zwraca jakąś wartość. Słowo kluczowe return nie jest wymagane. Wszystkie wyjątki obsługiwane jak RuntimeException w Javie. Nie są wymagane średniki na końcu linii, nawiasy przy podawaniu argumentów funkcji ani kropki w łańcuchach wywołań. Można definiować więcej niż jedną klasę publiczną na plik źródłowy. Możliwe jest stosowanie aliasów do importowanych typów (as). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 9 / 39
  • 43. Zaczynamy Co teraz? 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 10 / 39
  • 44. Zaczynamy Skrypty Skrypt – kod zapisany bezpośrednio w pliku bez deklaracji klas i metod. Możliwe łączenie kodu skryptu z kodem klas w ramach jednego pliku. Skrypt to tak naprawdę metoda statyczna main() klasy o nazwie jak plik źródłowy skryptu. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 11 / 39
  • 45. Zaczynamy Skrypty Skrypt – kod zapisany bezpośrednio w pliku bez deklaracji klas i metod. Możliwe łączenie kodu skryptu z kodem klas w ramach jednego pliku. Skrypt to tak naprawdę metoda statyczna main() klasy o nazwie jak plik źródłowy skryptu. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 11 / 39
  • 46. Zaczynamy Skrypty Skrypt – kod zapisany bezpośrednio w pliku bez deklaracji klas i metod. Możliwe łączenie kodu skryptu z kodem klas w ramach jednego pliku. Skrypt to tak naprawdę metoda statyczna main() klasy o nazwie jak plik źródłowy skryptu. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 11 / 39
  • 47. Zaczynamy Modyfikatory Dopuszczone modyfikatory takie jak w javie. Domyślnym modyfikatorem jest modyfikator public dla metod i klas. Dla pól publiczny „w pewnym sensie”. Modyfikator pakietowy definiowany adnotacją @PackageScope. Z powodu błędu (GROOVY-3010) w mechanizmach MOP modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym. Z tego samego powodu modyfikator final nie działa poprawnie dla zmiennych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 12 / 39
  • 48. Zaczynamy Modyfikatory Dopuszczone modyfikatory takie jak w javie. Domyślnym modyfikatorem jest modyfikator public dla metod i klas. Dla pól publiczny „w pewnym sensie”. Modyfikator pakietowy definiowany adnotacją @PackageScope. Z powodu błędu (GROOVY-3010) w mechanizmach MOP modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym. Z tego samego powodu modyfikator final nie działa poprawnie dla zmiennych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 12 / 39
  • 49. Zaczynamy Modyfikatory Dopuszczone modyfikatory takie jak w javie. Domyślnym modyfikatorem jest modyfikator public dla metod i klas. Dla pól publiczny „w pewnym sensie”. Modyfikator pakietowy definiowany adnotacją @PackageScope. Z powodu błędu (GROOVY-3010) w mechanizmach MOP modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym. Z tego samego powodu modyfikator final nie działa poprawnie dla zmiennych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 12 / 39
  • 50. Zaczynamy Modyfikatory Dopuszczone modyfikatory takie jak w javie. Domyślnym modyfikatorem jest modyfikator public dla metod i klas. Dla pól publiczny „w pewnym sensie”. Modyfikator pakietowy definiowany adnotacją @PackageScope. Z powodu błędu (GROOVY-3010) w mechanizmach MOP modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym. Z tego samego powodu modyfikator final nie działa poprawnie dla zmiennych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 12 / 39
  • 51. Zaczynamy Modyfikatory Dopuszczone modyfikatory takie jak w javie. Domyślnym modyfikatorem jest modyfikator public dla metod i klas. Dla pól publiczny „w pewnym sensie”. Modyfikator pakietowy definiowany adnotacją @PackageScope. Z powodu błędu (GROOVY-3010) w mechanizmach MOP modyfikatory dostępu spełniają swoją rolę jedynie poza Groovym. Z tego samego powodu modyfikator final nie działa poprawnie dla zmiennych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 12 / 39
  • 52. Zaczynamy Definicje Definiowanie klas, interfejsów, pól i metod praktycznie tak jak w Javie. Nie jest wymagane podawanie wszystkich modyfikatorów. Przykład public class Klasa extends InnaKlasa implements Interfejs { private def pole; public final String polePubliczne = ...; public String metoda(Object arg1) { ... } } Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 13 / 39
  • 53. Zaczynamy Definicje Definiowanie klas, interfejsów, pól i metod praktycznie tak jak w Javie. Nie jest wymagane podawanie wszystkich modyfikatorów. Przykład class Klasa extends InnaKlasa implements Interfejs { private pole; final String polePubliczne = ...; String metoda(Object arg1) { ... } } Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 13 / 39
  • 54. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 55. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 56. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 57. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 58. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 59. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 60. Zaczynamy Prawda Prawdą w Groovy jest: Wartość true dla wyrażeń logicznych (w tym typu Boolean). Niezerowa wartość dla typów numerycznych. Niepusty łańcuch. Niepusta kolekcja lub mapa. Iterator lub enumeracja wskazująca na następny element. Referencja obiektu nie będąca wartością null. Obiekt o wartości true zwracanej przez metodę asBoolean(). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 14 / 39
  • 61. Zaczynamy Łańcuchy W Groovy mamy pięć rodzajów łańcuchów: Zwykły łańcuch, zapisywany w ’uszach’. Zwykły łańcuch, zapisywany w /ukośnikach/ GString zapisywany w ”cudzysłowie”. Wariant wielowierszowy zapisu w uszach. Wariant wielowierszowy zapisu w cudzysłowie. Przykład def string = ’Zwykły łańcuch’ Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 15 / 39
  • 62. Zaczynamy Łańcuchy W Groovy mamy pięć rodzajów łańcuchów: Zwykły łańcuch, zapisywany w ’uszach’. Zwykły łańcuch, zapisywany w /ukośnikach/ GString zapisywany w ”cudzysłowie”. Wariant wielowierszowy zapisu w uszach. Wariant wielowierszowy zapisu w cudzysłowie. Przykład def string = /Zwykły łańcuch/ Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 15 / 39
  • 63. Zaczynamy Łańcuchy W Groovy mamy pięć rodzajów łańcuchów: Zwykły łańcuch, zapisywany w ’uszach’. Zwykły łańcuch, zapisywany w /ukośnikach/ GString zapisywany w ”cudzysłowie”. Wariant wielowierszowy zapisu w uszach. Wariant wielowierszowy zapisu w cudzysłowie. Przykład def string = ”Łańcuch GString” Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 15 / 39
  • 64. Zaczynamy Łańcuchy W Groovy mamy pięć rodzajów łańcuchów: Zwykły łańcuch, zapisywany w ’uszach’. Zwykły łańcuch, zapisywany w /ukośnikach/ GString zapisywany w ”cudzysłowie”. Wariant wielowierszowy zapisu w uszach. Wariant wielowierszowy zapisu w cudzysłowie. Przykład def string = ”’Zwykły łańcuch wielowierszowy”’ Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 15 / 39
  • 65. Zaczynamy Łańcuchy W Groovy mamy pięć rodzajów łańcuchów: Zwykły łańcuch, zapisywany w ’uszach’. Zwykły łańcuch, zapisywany w /ukośnikach/ GString zapisywany w ”cudzysłowie”. Wariant wielowierszowy zapisu w uszach. Wariant wielowierszowy zapisu w cudzysłowie. Przykład def string = ”””Łańcuch GString wielowierszowy””” Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 15 / 39
  • 66. Zaczynamy Wartości numeryczne Wartości numeryczne są obiektami. Domyślnie używane są typy Integer i BigDecimal. Przy operacjach dodawania, odejmowania i mnożenia wynik jest tego samego typu co „największy” typ użytych operandów. Chyba, że jednym z operandów jest typu Float lub Double. Wtedy wynik jest typu Double. Przy operacji dzielenia wynik jest typu Double lub BigDecimal. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 16 / 39
  • 67. Zaczynamy Wartości numeryczne Wartości numeryczne są obiektami. Domyślnie używane są typy Integer i BigDecimal. Przy operacjach dodawania, odejmowania i mnożenia wynik jest tego samego typu co „największy” typ użytych operandów. Chyba, że jednym z operandów jest typu Float lub Double. Wtedy wynik jest typu Double. Przy operacji dzielenia wynik jest typu Double lub BigDecimal. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 16 / 39
  • 68. Zaczynamy Wartości numeryczne Wartości numeryczne są obiektami. Domyślnie używane są typy Integer i BigDecimal. Przy operacjach dodawania, odejmowania i mnożenia wynik jest tego samego typu co „największy” typ użytych operandów. Chyba, że jednym z operandów jest typu Float lub Double. Wtedy wynik jest typu Double. Przy operacji dzielenia wynik jest typu Double lub BigDecimal. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 16 / 39
  • 69. Zaczynamy Wartości numeryczne Wartości numeryczne są obiektami. Domyślnie używane są typy Integer i BigDecimal. Przy operacjach dodawania, odejmowania i mnożenia wynik jest tego samego typu co „największy” typ użytych operandów. Chyba, że jednym z operandów jest typu Float lub Double. Wtedy wynik jest typu Double. Przy operacji dzielenia wynik jest typu Double lub BigDecimal. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 16 / 39
  • 70. Zaczynamy Wartości numeryczne Wartości numeryczne są obiektami. Domyślnie używane są typy Integer i BigDecimal. Przy operacjach dodawania, odejmowania i mnożenia wynik jest tego samego typu co „największy” typ użytych operandów. Chyba, że jednym z operandów jest typu Float lub Double. Wtedy wynik jest typu Double. Przy operacji dzielenia wynik jest typu Double lub BigDecimal. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 16 / 39
  • 71. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 72. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 73. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 74. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 75. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 76. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 77. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 78. Zaczynamy Tablice, listy, mapy… Domyślnie zamiast tablic używane są listy i mapy. Do zapisu list stosuje się notację [ wartość1, wartość2, …]. Identycznie zapisuje się tablice, z tym, że trzeba jawnie określić, że to tablica. Do zapisu map stosuje się notację [ klucz1 : wartość1, klucz2 : wartość2, …]. Specjalnym rodzajem listy są zakresy (Range). Dostęp do elementów poprzez wskazanie indeksu lub klucza w nawiasach kwadratowych. Indeksy mogą być ujemne, oraz mogą być zakresami. W przypadku map możliwe użycie klucza jako nazwy pola. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 17 / 39
  • 79. Zaczynamy Instrukcje warunkowe Składnia instrukcji if - else identyczna jak w Javie. Składnia instrukcji switch - case również identyczna. Aczkolwiek parametrem dla case może być dowolny obiekt mający metodę isCase(switchValue). Oprócz wyrażenia warunkowego warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje operator Elvisa: (warunek)?:wartośćDlaFałszu Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 18 / 39
  • 80. Zaczynamy Instrukcje warunkowe Składnia instrukcji if - else identyczna jak w Javie. Składnia instrukcji switch - case również identyczna. Aczkolwiek parametrem dla case może być dowolny obiekt mający metodę isCase(switchValue). Oprócz wyrażenia warunkowego warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje operator Elvisa: (warunek)?:wartośćDlaFałszu Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 18 / 39
  • 81. Zaczynamy Instrukcje warunkowe Składnia instrukcji if - else identyczna jak w Javie. Składnia instrukcji switch - case również identyczna. Aczkolwiek parametrem dla case może być dowolny obiekt mający metodę isCase(switchValue). Oprócz wyrażenia warunkowego warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje operator Elvisa: (warunek)?:wartośćDlaFałszu Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 18 / 39
  • 82. Zaczynamy Instrukcje warunkowe Składnia instrukcji if - else identyczna jak w Javie. Składnia instrukcji switch - case również identyczna. Aczkolwiek parametrem dla case może być dowolny obiekt mający metodę isCase(switchValue). Oprócz wyrażenia warunkowego warunek?wartośćDlaPrawdy:wartośćDlaFałszu istnieje operator Elvisa: (warunek)?:wartośćDlaFałszu Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 18 / 39
  • 83. Zaczynamy Pętle Instrukcja while identyczna jak w Javie. Działają wszystkie formy instrukcji for znane z Javy. Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa kluczowego in do iteracji po kolekcjach, mapach, tablicach. Brak pętli do...while. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 19 / 39
  • 84. Zaczynamy Pętle Instrukcja while identyczna jak w Javie. Działają wszystkie formy instrukcji for znane z Javy. Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa kluczowego in do iteracji po kolekcjach, mapach, tablicach. Brak pętli do...while. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 19 / 39
  • 85. Zaczynamy Pętle Instrukcja while identyczna jak w Javie. Działają wszystkie formy instrukcji for znane z Javy. Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa kluczowego in do iteracji po kolekcjach, mapach, tablicach. Brak pętli do...while. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 19 / 39
  • 86. Zaczynamy Pętle Instrukcja while identyczna jak w Javie. Działają wszystkie formy instrukcji for znane z Javy. Dodatkowo możliwy zapis pętli for z wykorzystaniem słowa kluczowego in do iteracji po kolekcjach, mapach, tablicach. Brak pętli do...while. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 19 / 39
  • 87. Zaczynamy Domknięcia Definicja Domknięcie – w metodach realizacji języków programowania jest to obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać. Blok kodu zawarty w nawiasach klamrowych przypisany (może być niejawnie) do literału. Może być również użyta metoda danego obiektu za pomocą operatora .&. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 20 / 39
  • 88. Zaczynamy Domknięcia Definicja Domknięcie – w metodach realizacji języków programowania jest to obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać. Blok kodu zawarty w nawiasach klamrowych przypisany (może być niejawnie) do literału. Może być również użyta metoda danego obiektu za pomocą operatora .&. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 20 / 39
  • 89. Zaczynamy Domknięcia Definicja Domknięcie – w metodach realizacji języków programowania jest to obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać. Blok kodu zawarty w nawiasach klamrowych przypisany (może być niejawnie) do literału. Może być również użyta metoda danego obiektu za pomocą operatora .&. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 20 / 39
  • 90. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 91. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 92. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 93. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 94. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 95. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 96. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 97. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 98. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 99. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 100. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 101. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 102. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 103. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 104. Zaczynamy Operatory Groovy wprowadza przeciążanie operatorów. oraz kilka tychże nowych względem javy: ** potęgowanie <=> porównanie .@ dostęp do pola .& referencja metody ?: Elvis ?. bezpieczne nawigowanie *. rozpiętość *.@ rozpiętość po polach =~ znalezienie wyrażenia ==~ dopasowanie wyrażenia regularnego regularnego as rzutowanie in zawieranie is identyczność Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 21 / 39
  • 105. Zaczynamy Groovy Beans W praktyce każdy obiekt w Groovy jest ziarnem (bean). Właściwości (Properties) ziaren okraślane przez metody set/get/is.... Autokreacja właściwości przez deklarację pól. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 22 / 39
  • 106. Zaczynamy Groovy Beans W praktyce każdy obiekt w Groovy jest ziarnem (bean). Właściwości (Properties) ziaren okraślane przez metody set/get/is.... Autokreacja właściwości przez deklarację pól. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 22 / 39
  • 107. Zaczynamy Groovy Beans W praktyce każdy obiekt w Groovy jest ziarnem (bean). Właściwości (Properties) ziaren okraślane przez metody set/get/is.... Autokreacja właściwości przez deklarację pól. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 22 / 39
  • 108. Głębsze wody Co teraz? 1 Wstęp 2 Zaczynamy 3 Głębsze wody 4 Koniec Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 23 / 39
  • 109. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład ’ala ma kota’.replaceAll(’a’, ’b’) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 110. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład ’ala ma kota’.replaceAll ’a’, ’b’ Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 111. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład 2.plus(2).minus(1).multiply(4) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 112. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład 2.plus 2 minus 1 multiply 4 Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 113. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład def a = 10; println a; Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 114. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład def a = 10 println a Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 115. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 116. Głębsze wody Łańcuch wywołań Nawiasy określające argumenty wywołania nie są wymagane. Kropki określające wywołanie metody nie są wymagane. Średniki na końcu linii również opcjonalne. Aczkolwiek czasem trzeba uważać. Przykład class Trial { private final thing = new Thing ( ) { thing.doSomething ( ) } } Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 24 / 39
  • 117. Głębsze wody Wyrażenia regularne Do zapisu wyrażeń regularnych przeznaczony łańcuch ukośnikowy. Operator ==~ sprawdza spełnianie wyrażenia regularnego. Operator =~ zwraca obiekt typu java.util.regex.Matcher z pary łańcuch i wyrażenie regularne. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 25 / 39
  • 118. Głębsze wody Wyrażenia regularne Do zapisu wyrażeń regularnych przeznaczony łańcuch ukośnikowy. Operator ==~ sprawdza spełnianie wyrażenia regularnego. Operator =~ zwraca obiekt typu java.util.regex.Matcher z pary łańcuch i wyrażenie regularne. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 25 / 39
  • 119. Głębsze wody Wyrażenia regularne Do zapisu wyrażeń regularnych przeznaczony łańcuch ukośnikowy. Operator ==~ sprawdza spełnianie wyrażenia regularnego. Operator =~ zwraca obiekt typu java.util.regex.Matcher z pary łańcuch i wyrażenie regularne. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 25 / 39
  • 120. Głębsze wody Przeciążanie operatorów Większośc operatorów w Groovy można przeciążyć. Operatory te po prostu wywołują konkretną metodę na obiekcie. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 26 / 39
  • 121. Głębsze wody Przeciążanie operatorów Większośc operatorów w Groovy można przeciążyć. Operatory te po prostu wywołują konkretną metodę na obiekcie. Przykład a + b ==> a.plus(b) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 26 / 39
  • 122. Głębsze wody Przeciążanie operatorów Większośc operatorów w Groovy można przeciążyć. Operatory te po prostu wywołują konkretną metodę na obiekcie. Przykład a * b ==> a.multiply(b) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 26 / 39
  • 123. Głębsze wody Przeciążanie operatorów Większośc operatorów w Groovy można przeciążyć. Operatory te po prostu wywołują konkretną metodę na obiekcie. Przykład a « b ==> a.leftShift(b) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 26 / 39
  • 124. Głębsze wody Przeciążanie operatorów Większośc operatorów w Groovy można przeciążyć. Operatory te po prostu wywołują konkretną metodę na obiekcie. Przykład a <=> b ==> a.compareTo(b) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 26 / 39
  • 125. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 126. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 127. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 128. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 129. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 130. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 131. Głębsze wody Domknięcia Domknięcia Niejawnie domknięcie to obiekt klasy Closure<V>. Wykonywane w momencie wywołania ich metody call(), a nie w momencie deklaracji. Możliwy dostęp do właściciela (owner) lub delegata (delegate). Domknięcia mogą być „bejcowane” (curry(), rcurry(), ncurry()). Domknięcia mogą być składane. Domknięcia mogą być optymalizowane pod względem rekurencji (trampoline()). Wynik domknięć może być składowany (memoize()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 27 / 39
  • 132. Głębsze wody GDK GDK Rozszerza wybrane standardowe klasy javy o metody czyniące je bardziej „grówiowe”. Wśród nich są metody wspierające wewnętrzne mechanizmy grówiego (np. getMetaClass(), getProperties()). Są metody skracające użycie popularnych idiomów (np. println(), sleep()). Są metody iteracyjne (np. each(), find(), every()). Przeciążenia operatorów. Są metody ułatwiajace pracę z daną klasą. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 28 / 39
  • 133. Głębsze wody GDK GDK Rozszerza wybrane standardowe klasy javy o metody czyniące je bardziej „grówiowe”. Wśród nich są metody wspierające wewnętrzne mechanizmy grówiego (np. getMetaClass(), getProperties()). Są metody skracające użycie popularnych idiomów (np. println(), sleep()). Są metody iteracyjne (np. each(), find(), every()). Przeciążenia operatorów. Są metody ułatwiajace pracę z daną klasą. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 28 / 39
  • 134. Głębsze wody GDK GDK Rozszerza wybrane standardowe klasy javy o metody czyniące je bardziej „grówiowe”. Wśród nich są metody wspierające wewnętrzne mechanizmy grówiego (np. getMetaClass(), getProperties()). Są metody skracające użycie popularnych idiomów (np. println(), sleep()). Są metody iteracyjne (np. each(), find(), every()). Przeciążenia operatorów. Są metody ułatwiajace pracę z daną klasą. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 28 / 39
  • 135. Głębsze wody GDK GDK Rozszerza wybrane standardowe klasy javy o metody czyniące je bardziej „grówiowe”. Wśród nich są metody wspierające wewnętrzne mechanizmy grówiego (np. getMetaClass(), getProperties()). Są metody skracające użycie popularnych idiomów (np. println(), sleep()). Są metody iteracyjne (np. each(), find(), every()). Przeciążenia operatorów. Są metody ułatwiajace pracę z daną klasą. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 28 / 39
  • 136. Głębsze wody GDK GDK Rozszerza wybrane standardowe klasy javy o metody czyniące je bardziej „grówiowe”. Wśród nich są metody wspierające wewnętrzne mechanizmy grówiego (np. getMetaClass(), getProperties()). Są metody skracające użycie popularnych idiomów (np. println(), sleep()). Są metody iteracyjne (np. each(), find(), every()). Przeciążenia operatorów. Są metody ułatwiajace pracę z daną klasą. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 28 / 39
  • 137. Głębsze wody GDK GDK Rozszerza wybrane standardowe klasy javy o metody czyniące je bardziej „grówiowe”. Wśród nich są metody wspierające wewnętrzne mechanizmy grówiego (np. getMetaClass(), getProperties()). Są metody skracające użycie popularnych idiomów (np. println(), sleep()). Są metody iteracyjne (np. each(), find(), every()). Przeciążenia operatorów. Są metody ułatwiajace pracę z daną klasą. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 28 / 39
  • 138. Głębsze wody GDK Mapy i kolekcje Wykonujące działania na każdym elemencie (np. each(), eachWithIndex(), eachPermutation()). Sprawdzające kolekcję (mapę) (np. any(), every() Wyszukujące (np. find(), findAll(), findResult(), grep(), min() Agregujące (np. sum(), inject() Przekształcające (np. collect(), sort(), unique(), flatten() Grupujące (np. groupBy(), split()) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 29 / 39
  • 139. Głębsze wody GDK Mapy i kolekcje Wykonujące działania na każdym elemencie (np. each(), eachWithIndex(), eachPermutation()). Sprawdzające kolekcję (mapę) (np. any(), every() Wyszukujące (np. find(), findAll(), findResult(), grep(), min() Agregujące (np. sum(), inject() Przekształcające (np. collect(), sort(), unique(), flatten() Grupujące (np. groupBy(), split()) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 29 / 39
  • 140. Głębsze wody GDK Mapy i kolekcje Wykonujące działania na każdym elemencie (np. each(), eachWithIndex(), eachPermutation()). Sprawdzające kolekcję (mapę) (np. any(), every() Wyszukujące (np. find(), findAll(), findResult(), grep(), min() Agregujące (np. sum(), inject() Przekształcające (np. collect(), sort(), unique(), flatten() Grupujące (np. groupBy(), split()) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 29 / 39
  • 141. Głębsze wody GDK Mapy i kolekcje Wykonujące działania na każdym elemencie (np. each(), eachWithIndex(), eachPermutation()). Sprawdzające kolekcję (mapę) (np. any(), every() Wyszukujące (np. find(), findAll(), findResult(), grep(), min() Agregujące (np. sum(), inject() Przekształcające (np. collect(), sort(), unique(), flatten() Grupujące (np. groupBy(), split()) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 29 / 39
  • 142. Głębsze wody GDK Mapy i kolekcje Wykonujące działania na każdym elemencie (np. each(), eachWithIndex(), eachPermutation()). Sprawdzające kolekcję (mapę) (np. any(), every() Wyszukujące (np. find(), findAll(), findResult(), grep(), min() Agregujące (np. sum(), inject() Przekształcające (np. collect(), sort(), unique(), flatten() Grupujące (np. groupBy(), split()) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 29 / 39
  • 143. Głębsze wody GDK Mapy i kolekcje Wykonujące działania na każdym elemencie (np. each(), eachWithIndex(), eachPermutation()). Sprawdzające kolekcję (mapę) (np. any(), every() Wyszukujące (np. find(), findAll(), findResult(), grep(), min() Agregujące (np. sum(), inject() Przekształcające (np. collect(), sort(), unique(), flatten() Grupujące (np. groupBy(), split()) Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 29 / 39
  • 144. Głębsze wody GDK Praca z plikami Dostarczone są metody ułatwiające pracę zarówno ze strukturą plików, jak i z ich zawartością. Przy części z nich nie trzeba martwić się o zamykanie zasobów. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 30 / 39
  • 145. Głębsze wody GDK Praca z plikami Dostarczone są metody ułatwiające pracę zarówno ze strukturą plików, jak i z ich zawartością. Przy części z nich nie trzeba martwić się o zamykanie zasobów. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 30 / 39
  • 146. Głębsze wody Meta Object Protocol MOP Meta-Object to każdy byt który manipuluje, tworzy, opisuje lub implementuje inne obiekty. Meta-Object Protocol (MOP) jest interpretatorem semantyki programu, który jest otwarty i elastyczny. Może być użyty zarówno w trakcie wykonywania, jak i kompilacji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 31 / 39
  • 147. Głębsze wody Meta Object Protocol MOP Meta-Object to każdy byt który manipuluje, tworzy, opisuje lub implementuje inne obiekty. Meta-Object Protocol (MOP) jest interpretatorem semantyki programu, który jest otwarty i elastyczny. Może być użyty zarówno w trakcie wykonywania, jak i kompilacji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 31 / 39
  • 148. Głębsze wody Meta Object Protocol MOP Meta-Object to każdy byt który manipuluje, tworzy, opisuje lub implementuje inne obiekty. Meta-Object Protocol (MOP) jest interpretatorem semantyki programu, który jest otwarty i elastyczny. Może być użyty zarówno w trakcie wykonywania, jak i kompilacji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 31 / 39
  • 149. Głębsze wody Meta Object Protocol Na dzień dobry Dynamiczne wywoływanie metod. Obsługa dostępu do nieistniejącym metod (methodMissing()), i właściwości (propertyMissing()). Nadpisanie dostępu do właściwości (getProperty(), setProperty(), i wywoływania metod (invokeMethod()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 32 / 39
  • 150. Głębsze wody Meta Object Protocol Na dzień dobry Dynamiczne wywoływanie metod. Obsługa dostępu do nieistniejącym metod (methodMissing()), i właściwości (propertyMissing()). Nadpisanie dostępu do właściwości (getProperty(), setProperty(), i wywoływania metod (invokeMethod()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 32 / 39
  • 151. Głębsze wody Meta Object Protocol Na dzień dobry Dynamiczne wywoływanie metod. Obsługa dostępu do nieistniejącym metod (methodMissing()), i właściwości (propertyMissing()). Nadpisanie dostępu do właściwości (getProperty(), setProperty(), i wywoływania metod (invokeMethod()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 32 / 39
  • 152. Głębsze wody Meta Object Protocol Na dzień dobry Dynamiczne wywoływanie metod. Obsługa dostępu do nieistniejącym metod (methodMissing()), i właściwości (propertyMissing()). Nadpisanie dostępu do właściwości (getProperty(), setProperty(), i wywoływania metod (invokeMethod()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 32 / 39
  • 153. Głębsze wody Meta Object Protocol Na dzień dobry Dynamiczne wywoływanie metod. Obsługa dostępu do nieistniejącym metod (methodMissing()), i właściwości (propertyMissing()). Nadpisanie dostępu do właściwości (getProperty(), setProperty(), i wywoływania metod (invokeMethod()). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 32 / 39
  • 154. Głębsze wody Meta Object Protocol MetaClass Rodzaj obiektu opisującego klasę. Możliwość zmiany tego opisu w trakcie działania programu. Zmiany mogą dotyczyć zarówno całej klasy, jak i instancji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 33 / 39
  • 155. Głębsze wody Meta Object Protocol MetaClass Rodzaj obiektu opisującego klasę. Możliwość zmiany tego opisu w trakcie działania programu. Zmiany mogą dotyczyć zarówno całej klasy, jak i instancji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 33 / 39
  • 156. Głębsze wody Meta Object Protocol MetaClass Rodzaj obiektu opisującego klasę. Możliwość zmiany tego opisu w trakcie działania programu. Zmiany mogą dotyczyć zarówno całej klasy, jak i instancji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 33 / 39
  • 157. Głębsze wody Meta Object Protocol Kategorie Koncepcja zaczerpnięta z Objective-C. Umożliwia zmianę kontraktu klasy tylko wtedy, gdy tego chcemy. Możliwe protezowanie wielodziedziczenia (@Mixin). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 34 / 39
  • 158. Głębsze wody Meta Object Protocol Kategorie Koncepcja zaczerpnięta z Objective-C. Umożliwia zmianę kontraktu klasy tylko wtedy, gdy tego chcemy. Możliwe protezowanie wielodziedziczenia (@Mixin). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 34 / 39
  • 159. Głębsze wody Meta Object Protocol Kategorie Koncepcja zaczerpnięta z Objective-C. Umożliwia zmianę kontraktu klasy tylko wtedy, gdy tego chcemy. Możliwe protezowanie wielodziedziczenia (@Mixin). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 34 / 39
  • 160. Głębsze wody Meta Object Protocol Transformacje AST MOPowanie w trakcie kompilacji. Realizowane poprzez anotacje. Wraz z językiem dostarczana jest gromadka przydatnych transformacji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 35 / 39
  • 161. Głębsze wody Meta Object Protocol Transformacje AST MOPowanie w trakcie kompilacji. Realizowane poprzez anotacje. Wraz z językiem dostarczana jest gromadka przydatnych transformacji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 35 / 39
  • 162. Głębsze wody Meta Object Protocol Transformacje AST MOPowanie w trakcie kompilacji. Realizowane poprzez anotacje. Wraz z językiem dostarczana jest gromadka przydatnych transformacji. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 35 / 39
  • 163. Głębsze wody Kompilacja statyczna Możliwe jest wymuszenie sprawdzania typu (@TypeCheck). Możliwa jest kompilacja statyczna kodu (@CompileStatic). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 36 / 39
  • 164. Głębsze wody Kompilacja statyczna Możliwe jest wymuszenie sprawdzania typu (@TypeCheck). Możliwa jest kompilacja statyczna kodu (@CompileStatic). Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 36 / 39
  • 165. Głębsze wody Budowniczy Wzorzec Budowniczy Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 37 / 39
  • 166. Głębsze wody Budowniczy Wzorzec Budowniczy Director ConcreteBuilder Builder builder: Builder buildPart() buildPart() construct() getResult(): Product <<creates>> Product Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 37 / 39
  • 167. Głębsze wody Budowniczy Głównie do usprawnienia obsługi struktur drzewiastych. Powszechnie używana w świecie Grooviego. Chociażby do budowania XML, GUI, DSL. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 38 / 39
  • 168. Głębsze wody Budowniczy Głównie do usprawnienia obsługi struktur drzewiastych. Powszechnie używana w świecie Grooviego. Chociażby do budowania XML, GUI, DSL. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 38 / 39
  • 169. Głębsze wody Budowniczy Głównie do usprawnienia obsługi struktur drzewiastych. Powszechnie używana w świecie Grooviego. Chociażby do budowania XML, GUI, DSL. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 38 / 39
  • 170. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 171. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 172. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 173. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 174. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 175. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 176. Głębsze wody Co jeszcze? Łatwa obsługa XML … i SQL. Repozytoriów Ivy (Maven) – Grape Wsparcie dla równoległości – GPars Wsparcie testowania i imitowania – Spock, GMock Rozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czy GAE (Gaelyk). I pewnie wiele innych. Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 39 / 39
  • 177. Koniec To już jest koniec, nie ma już nic Jesteście wolni, możecie iść! Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 40 / 39