Upload
fpajak
View
471
Download
1
Embed Size (px)
DESCRIPTION
Wprowadzenie do języka Groovy przygotowane na XVIII spotkanie Szczecińskiej JUG.
Citation preview
.
......
Na Jawie FrapującyCzyli 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 jestdoskonały.Autor nie jest guru jeśli chodzi o prezentowany temat.Autor zastrzega sobie prawo do nieznajomości odpowiedzi nazadane 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 programistomjavy 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 statycznejkompilacji 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 doczytania 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 przyrozwijaniu 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 iimitowania „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 bibliotekamiJavy.
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 – lutyOpublikowana 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 – czerwiecOpublikowana 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 podawaniuargumentó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 podawaniuargumentó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 podawaniuargumentó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 podawaniuargumentó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 podawaniuargumentó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 podawaniuargumentó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 podawaniuargumentó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 podawaniuargumentó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 imetod.Możliwe łączenie kodu skryptu z kodem klas w ramach jednegopliku.Skrypt to tak naprawdę metoda statyczna main() klasy o nazwiejak 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 imetod.Możliwe łączenie kodu skryptu z kodem klas w ramach jednegopliku.Skrypt to tak naprawdę metoda statyczna main() klasy o nazwiejak 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 imetod.Możliwe łączenie kodu skryptu z kodem klas w ramach jednegopliku.Skrypt to tak naprawdę metoda statyczna main() klasy o nazwiejak 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 iklas. Dla pól publiczny „w pewnym sensie”.Modyfikator pakietowy definiowany adnotacją @PackageScope.Z powodu błędu (GROOVY-3010) w mechanizmach MOPmodyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.Z tego samego powodu modyfikator final nie działa poprawniedla 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 iklas. Dla pól publiczny „w pewnym sensie”.Modyfikator pakietowy definiowany adnotacją @PackageScope.Z powodu błędu (GROOVY-3010) w mechanizmach MOPmodyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.Z tego samego powodu modyfikator final nie działa poprawniedla 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 iklas. Dla pól publiczny „w pewnym sensie”.Modyfikator pakietowy definiowany adnotacją @PackageScope.Z powodu błędu (GROOVY-3010) w mechanizmach MOPmodyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.Z tego samego powodu modyfikator final nie działa poprawniedla 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 iklas. Dla pól publiczny „w pewnym sensie”.Modyfikator pakietowy definiowany adnotacją @PackageScope.Z powodu błędu (GROOVY-3010) w mechanizmach MOPmodyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.Z tego samego powodu modyfikator final nie działa poprawniedla 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 iklas. Dla pól publiczny „w pewnym sensie”.Modyfikator pakietowy definiowany adnotacją @PackageScope.Z powodu błędu (GROOVY-3010) w mechanizmach MOPmodyfikatory dostępu spełniają swoją rolę jedynie poza Groovym.Z tego samego powodu modyfikator final nie działa poprawniedla 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 wJavie.Nie jest wymagane podawanie wszystkich modyfikatorów.
Przykładpublic 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 wJavie.Nie jest wymagane podawanie wszystkich modyfikatorów.
Przykładclass 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ładdef 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ładdef 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ładdef 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ładdef string = ”’Zwykły łańcuchwielowierszowy”’
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ładdef string = ”””Łańcuch GStringwielowierszowy”””
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 jesttego samego typu co „największy” typ użytych operandów.Chyba, że jednym z operandów jest typu Float lub Double. Wtedywynik 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 jesttego samego typu co „największy” typ użytych operandów.Chyba, że jednym z operandów jest typu Float lub Double. Wtedywynik 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 jesttego samego typu co „największy” typ użytych operandów.Chyba, że jednym z operandów jest typu Float lub Double. Wtedywynik 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 jesttego samego typu co „największy” typ użytych operandów.Chyba, że jednym z operandów jest typu Float lub Double. Wtedywynik 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 jesttego samego typu co „największy” typ użytych operandów.Chyba, że jednym z operandów jest typu Float lub Double. Wtedywynik 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 wnawiasach 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 wnawiasach 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 wnawiasach 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 wnawiasach 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 wnawiasach 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 wnawiasach 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 wnawiasach 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 wnawiasach 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ącymetodę isCase(switchValue).Oprócz wyrażenia warunkowegowarunek?wartośćDlaPrawdy:wartośćDlaFałszu istniejeoperator 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ącymetodę isCase(switchValue).Oprócz wyrażenia warunkowegowarunek?wartośćDlaPrawdy:wartośćDlaFałszu istniejeoperator 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ącymetodę isCase(switchValue).Oprócz wyrażenia warunkowegowarunek?wartośćDlaPrawdy:wartośćDlaFałszu istniejeoperator 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ącymetodę isCase(switchValue).Oprócz wyrażenia warunkowegowarunek?wartośćDlaPrawdy:wartośćDlaFałszu istniejeoperator 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łowakluczowego 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łowakluczowego 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łowakluczowego 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łowakluczowego 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
DefinicjaDomknięcie – w metodach realizacji języków programowania jest toobiekt 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
DefinicjaDomknięcie – w metodach realizacji języków programowania jest toobiekt 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
DefinicjaDomknięcie – w metodach realizacji języków programowania jest toobiekt 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 regularnegoas rzutowanie in zawieranieis 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 metodyset/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 metodyset/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 metodyset/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ład2.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ład2.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ładdef 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ładdef a = 10println 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
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
Ł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ładclass 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ńcuchukośnikowy.Operator ==~ sprawdza spełnianie wyrażenia regularnego.Operator =~ zwraca obiekt typu java.util.regex.Matcher zpary ł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ńcuchukośnikowy.Operator ==~ sprawdza spełnianie wyrażenia regularnego.Operator =~ zwraca obiekt typu java.util.regex.Matcher zpary ł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ńcuchukośnikowy.Operator ==~ sprawdza spełnianie wyrażenia regularnego.Operator =~ zwraca obiekt typu java.util.regex.Matcher zpary ł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.
Przykłada + 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łada + 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łada * 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łada « 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łada <=> 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 wmomencie 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 wmomencie 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 wmomencie 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 wmomencie 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 wmomencie 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 wmomencie 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 wmomencie 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 jebardziej „grówiowe”.Wśród nich są metody wspierające wewnętrzne mechanizmygró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 jebardziej „grówiowe”.Wśród nich są metody wspierające wewnętrzne mechanizmygró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 jebardziej „grówiowe”.Wśród nich są metody wspierające wewnętrzne mechanizmygró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 jebardziej „grówiowe”.Wśród nich są metody wspierające wewnętrzne mechanizmygró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 jebardziej „grówiowe”.Wśród nich są metody wspierające wewnętrzne mechanizmygró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 jebardziej „grówiowe”.Wśród nich są metody wspierające wewnętrzne mechanizmygró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 lubimplementuje inne obiekty.Meta-Object Protocol (MOP) jest interpretatorem semantykiprogramu, 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 lubimplementuje inne obiekty.Meta-Object Protocol (MOP) jest interpretatorem semantykiprogramu, 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 lubimplementuje inne obiekty.Meta-Object Protocol (MOP) jest interpretatorem semantykiprogramu, 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 przydatnychtransformacji.
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 przydatnychtransformacji.
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 przydatnychtransformacji.
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
Directorbuilder: Builderconstruct()
Builder
buildPart()
ConcreteBuilder
buildPart()getResult(): Product
Product
<<creates>>
Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 37 / 39
Głębsze wody Budowniczy
Wzorzec Budowniczy
Directorbuilder: Builderconstruct()
Builder
buildPart()
ConcreteBuilder
buildPart()getResult(): Product
Product
<<creates>>
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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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) – GrapeWsparcie dla równoległości – GParsWsparcie testowania i imitowania – Spock, GMockRozwijania aplikacji biurkowych (Griffon), sieciowych (Grails) czyGAE (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ż nicJesteście wolni, możecie iść!
Filip „Filus” Pająk (Szczecińska JUG) Na Jawie Frapujący 20 września 2012 40 / 39