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
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
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
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
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
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
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