#8 Biblioteka ButterKnife, czyli najwyższy czas zacząć pisać mniej kodu

Standardowy kod, który trzeba napisać to rzecz, która sprawia radość tylko jak się pierwszy raz programuje 😉 Człowiek jest pełen pasji, odkrywa nowe rzeczy i wcale mu nie przeszkadza, że generuje lub pisze kolejny setter, czy powiela linijkę i zmienia tylko nazwy. Z czasem jednak coś zaczyna uwierać. Brzydko to potem wygląda, leży najczęściej na spodzie klasy, nikt tego nie czyta (bo i po co czytać auto-wygenerowane przez środowisko, gettery, settery itd). W Androidzie mamy jeszcze kilka rzeczy ponad standardowe, javowe instrukcje. A jak powszechnie wiadomo, co swoją drogą opisał już dawno temu Einstein:

No dobra, może Einstein nie koniecznie to miał na myśli, ale pasuje bardzo dobrze 😉 Im więcej kodu, tym większa szansa, że nie zauważamy czegoś ważnego. Czasem w ogóle zdarza się zapomnieć czegoś wygenerować i problem gotowy. Z czasem zaczyna się po prostu nie chcieć tego wszystkiego pisać. A jak wiadomo, lenistwo jest motorem postępu, dlatego opiszę bibliotekę Butter Knife, która pozwoli nam zaoszczędzić kilka linijek, i bardzo ułatwi późniejsze czytanie kodu. Biblioteka nie jest jakąś super nowością na rynku, nie mniej wato docenić to co oferuje.
Instalacja tej biblioteki to po prostu kwintesencja lenistwa, w pliku build.gradle, w module aplikacji:
Ewentualnie podbijamy wersję, jeśli pojawi się jakaś aktualizacja albo instalujemy wersję beta, jak ktoś lubi 😉
Pierwszą rzeczą, którą możemy wyeliminować jest zapis:
Czyli standardowy androidowy zapis łączący elementy widoku z plików xml z obiektami. Niby nic wielkiego, ale pamiętajmy, że trzeba go umieszczać w metodzie cyklu życia, najczęściej onCreate(), albo przynajmniej stamtąd wywoływać. A jak wiemy, obiektów dziedziczących po View możemy mieć w aktywności całkiem sporo. Dzięki Butter Knife można skorzystać z adnotacji:
definiując nasz obiekt.
Z kolei w metodzie onCreate powinno być jeszcze wywołane (zresztą, za każdym razem kiedy korzystamy z Butter Knife):
Ok, przy pierwszym przykładzie mamy taką samą ilość kodu, ale znacznie zmienia się jakość i czytelność. Widoki których będziemy używać w całej klasie mamy już zdeklarowane na samym początku, nie musimy już z nimi nic dodatkowo robić w metodach cyklu życia, możemy normalnie z nich korzystać. Kolejny przykład jest bardziej sexi:
Pobrane obiekty wpakowujemy od razu do tablicy, nie musimy ich nigdzie deklarować, dzięki czemu zaoszczędzamy już 6 linii standardowego kodu.
Dalej spójrzmy sobie na:
Nie musimy pisać metody onClick w xml, ani dodawać listenera na obiekcie. To wszystko, co potrzeba, żeby kliknięcie zadziałało. Możemy sobie jeszcze wywołać @onLongClick, do długich kliknięć, albo @onItemClick dla elementów typu listView.
Biblioteka radzi sobie także z fragmentami, trzeba jednak trochę zmienić standardową metodę na:
ButterKnife.bind(this, view);

Jeszcze kilka ciekawych funkcji z tej biblioteki:

Czyli pobranie grafiki, koloru, albo napisów w aktualnym języku (o ile jest obsłużony, jeśli nie, pobiera w języku aplikacji). Jak widać, znowu oszczędzamy sporo linii.

Wciąż mało? 😉
To na koniec coś dla ekstremalnie leniwych, czyli dodatek, który po kliknięciu skrótu „Generate code” wygeneruje nam to co potrzebujemy 😉 Nie działa w aktualnej wersji Android Studio, ale autor pracuje nad poprawką. Dodatek nazywa się android-butterknife-zelezny i znajduje się tutaj i tutaj.

Wypisałem najważniejsze możliwości, które daje nam biblioteka Butter Knife. Patrząc obiektywnie, nie ma tego dużo. Korzystanie z niej jest dzięki temu bardzo proste, intuicyjne, próg wejścia jest niski, a korzyści naprawdę spore. Osobiście bardzo polecam 😉
Pozdrawiam!