Guava

1,881 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,881
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Guava

  1. 1. Plan prezentacji Jak to robiłeś dotychczas Google Guava - podstawy Google Guava - podsumowanie (Bardziej) eleganckie kolekcje w Java Google Guava (Collections) Konrad “Ktoso“ Malawski www.project13.pl 17 Kwietnia 2010 Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  2. 2. Plan prezentacji Jak to robiłeś dotychczas Google Guava - podstawy Google Guava - podsumowanie 1 Plan prezentacji 2 Jak to robiłeś dotychczas Co z nimi najczęściej robisz? I na prawdę było eleganckie? 3 Google Guava - podstawy Taki fajny owoc Po co mi to? Tworzenie kolekcji Zanim cokolwiek umieścisz w kolekcji... Sprawdzanie nulla? 4 Google Guava - podsumowanie A to tylko 1/10 całej biblioteki! Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  3. 3. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Co z nimi najczęściej robisz? Najczęściej chciałbyś: Zrobić coś na wszystkich elementach Zrobić coś na niektórych elementach Szybko tworzyć kolekjcę Szybko modyfikować kolekcje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  4. 4. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Co z nimi najczęściej robisz? Najczęściej chciałbyś: Zrobić coś na wszystkich elementach Zrobić coś na niektórych elementach Szybko tworzyć kolekjcę Szybko modyfikować kolekcje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  5. 5. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Co z nimi najczęściej robisz? Najczęściej chciałbyś: Zrobić coś na wszystkich elementach Zrobić coś na niektórych elementach Szybko tworzyć kolekjcę Szybko modyfikować kolekcje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  6. 6. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Co z nimi najczęściej robisz? Najczęściej chciałbyś: Zrobić coś na wszystkich elementach Zrobić coś na niektórych elementach Szybko tworzyć kolekjcę Szybko modyfikować kolekcje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  7. 7. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Wszystko się da - ale czy elegancko? Wszystko to jest oczywiście możliwe bez dodatkowych bibliotek. jednak... Czy twój kod jest elegancki? Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  8. 8. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Wszystko się da - ale czy elegancko? Wszystko to jest oczywiście możliwe bez dodatkowych bibliotek. jednak... Czy twój kod jest elegancki? Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  9. 9. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Wszystko się da - ale czy elegancko? Wszystko to jest oczywiście możliwe bez dodatkowych bibliotek. jednak... Czy twój kod jest elegancki? Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  10. 10. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  11. 11. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Rozwiązania które i tak na pewno stosujesz Na pewno choć raz napisałeś... Klasę napakowaną funkcjami statycznymi - ”pomocnik”? Klasy które mają conajmniej kilka metod pomocniczych do kolekcji? Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej. Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  12. 12. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Rozwiązania które i tak na pewno stosujesz Na pewno choć raz napisałeś... Klasę napakowaną funkcjami statycznymi - ”pomocnik”? Klasy które mają conajmniej kilka metod pomocniczych do kolekcji? Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej. Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  13. 13. Plan prezentacji Jak to robiłeś dotychczas Co z nimi najczęściej robisz? Google Guava - podstawy I na prawdę było eleganckie? Google Guava - podsumowanie Rozwiązania które i tak na pewno stosujesz Na pewno choć raz napisałeś... Klasę napakowaną funkcjami statycznymi - ”pomocnik”? Klasy które mają conajmniej kilka metod pomocniczych do kolekcji? Więc czemu nie mieć tego w bibliotece? Dobrze przemyślanej. Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  14. 14. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Google Guava Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  15. 15. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Google Guava Google Guava zawiera Google Collections o którym będę dalej opowiadał. Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  16. 16. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? ”Więc po co mi to!?!?” Ok, więc po co ci ”kolejna biblioteka”? To co trudne, uczyń prostym. To co proste, uczyń eleganckim. Google Collections rozszerza to co znasz z Javy, nie zastępuje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  17. 17. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? ”Więc po co mi to!?!?” Ok, więc po co ci ”kolejna biblioteka”? To co trudne, uczyń prostym. To co proste, uczyń eleganckim. Google Collections rozszerza to co znasz z Javy, nie zastępuje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  18. 18. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? ”Więc po co mi to!?!?” Ok, więc po co ci ”kolejna biblioteka”? To co trudne, uczyń prostym. To co proste, uczyń eleganckim. Google Collections rozszerza to co znasz z Javy, nie zastępuje Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  19. 19. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Zmniejsz swój WTF/min! Jedynym dobrym wyznacznikiem jakości kodu jest WTF/min. Zmniejsz ten wyznacznik dzięki Guava! Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  20. 20. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? I tak jest nieźle - od 1.5 mamy ”for each” ”Ale przecież mamy fantastyczną foreach od Javy 1.5!!!” f o r ( Sudo sudo : sudos ) { Sudo . m a k e M e A S a n dw i t c h ( ) ; } Super! Jednak jedna pętla to trochę mało aby opanować wszystkie problemy z kolekcjami - nie sądzisz? Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  21. 21. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? ”Guava jest od Google jest super fajna i słitaśna.” Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  22. 22. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Mam nadzieję, że ostatnie slajdy cię nie przekonały. Bardzo dobrze! Zacznijmy zatem z przykładami. Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  23. 23. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Brzydkie tworzenie kolekcji Map<String , List<String>> map = new HashMap<String , List<String >>() ; Musisz przepisać ten koszmar Genericsów... Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  24. 24. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Tworzenie kolekcji przez Guava To samo, w Guavie wygląda tak: Map<String , List<String>> mapOfLists = Maps . newHashMap ( ) ; Korzysta z kilku sztuczek i odrobiny magii... Analogicznie możesz tworzyć każdą kolekcję. Map<String , List<String>> mapOfLists = new HashMap <>() ; Powyższy fragment kodu zadziała dopiero w Java 7 - tymczasem, mamy Guava. Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  25. 25. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Metoda hashCode Jest konieczna jeśli chcemy sensownie korzystać z kolekcji... Ilu z was pisze ją ręcznie? p u b l i c i n t hashCode ( ) { i n t result = 0 ; result = 31 ∗ result + ( address != n u l l ? address . ← hashCode ( ) : 0 ) ; result = 31 ∗ result + ( t a r g e t A r r i v a l D a t e != n u l l ? ← t a r g e t A r r i v a l D a t e . hashCode ( ) : 0 ) ; result = 31 ∗ result + lineItems . hashCode ( ) ; r e t u r n result ; } Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  26. 26. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? HashCode w Guavie Można ją, dzięki Guava, napisać tak: p u b l i c i n t hashCode ( ) { r e t u r n Objects . hashCode ( address , targetArrivalDate , ← lineItems ) ; } Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  27. 27. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Tradycyjne equals Skoro mówimy o hashcode, to oczywiście musimy również napisać equals: (Koszmarne siedlisko sprawdzania czy null oraz porównań...) p u b l i c b o o l e a n equals ( Object o ) { i f ( o i n s t a n c e o f Order ) { Order that = ( Order ) o ; r e t u r n ( address != n u l l ? address . equals ( that . address ) : that . address == n u l l ) && ( t a r g e t A r r i v a l D a t e != n u l l ? t a r g e t A r r i v a l D a t e . equals ( that . ← targetArrivalDate ) : that . t a r g e t A r r i v a l D a t e == n u l l ) && lineItems . equals ( that . lineItems ) ; } else { return false ; } Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  28. 28. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? HashCode w Guavie Można ją, dzięki Guava, troszkę ładniej: p u b l i c b o o l e a n equals ( Object o ) { i f ( o i n s t a n c e o f Order ) { Order that = ( Order ) o ; r e t u r n Objects . equal ( address , that . address ) && Objects . equal ( targetArrivalDate , that . ← targetArrivalDate ) && Objects . equal ( lineItems , that . lineItems ) ; } else { return false ; } } Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  29. 29. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Tradycyjnie... Czasami chcemy mieć pewność, że nie przyjmiemy null do naszego obiektu. O ile o tym w ogóle pamiętasz, zrobisz prawdopodobnie kilka ifów. p u b l i c Sklep ( Banan banan ) { i f ( banan==n u l l ) t h r o w new N u l l P o i n t e r E x c e p t i o n ( ) ; t h i s . banan = banan ; } Fuj! Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  30. 30. Taki fajny owoc Plan prezentacji Po co mi to? Jak to robiłeś dotychczas Tworzenie kolekcji Google Guava - podstawy Zanim cokolwiek umieścisz w kolekcji... Google Guava - podsumowanie Sprawdzanie nulla? Preconditions.checkNotNull w Guavie Zamiast osobno sprawdzać czy mamy do czynienia z null, zwracamy obiekt przez checkNotNull - rzuci on wyjątek za nas gdy znajdzie nulla! p u b l i c Sklep ( Banan banan ) { t h i s . banan = Preconditions . checkNotNull ( banan ) ; } To świetne do przekazywania wartości do super()! (Dawniej istniało pod nazwą Objects.nonNull) Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  31. 31. Plan prezentacji Jak to robiłeś dotychczas A to tylko 1/10 całej biblioteki! Google Guava - podstawy Google Guava - podsumowanie Guava to nie tylko kolekcje! Guava pozwala również na: sprawną pracę z strumieniami sprawne zamykanie plików ulepszone ”pakowanie” obiektów sprawniejszą pracę z wyjątkami usprawnioną współbieżność Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  32. 32. Plan prezentacji Jak to robiłeś dotychczas A to tylko 1/10 całej biblioteki! Google Guava - podstawy Google Guava - podsumowanie Pytania? http://guava-libraries.googlecode.com/svn/ Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio
  33. 33. Plan prezentacji Jak to robiłeś dotychczas A to tylko 1/10 całej biblioteki! Google Guava - podstawy Google Guava - podsumowanie Dziękuję za uwagę! portfolio: www.project13.pl blog: www.blog.project13.pl email: kmalawski@project13.pl jabber: ktoso@linux.pl twitter: @ktosopl Konrad “Ktoso“ Malawski www.project13.pl (Bardziej) eleganckie kolekcje w Java Google Guava (Collectio

×