Boilerplate w Androidzie

Pisząc aplikację na system Android w Javie mamy sporo kodu, który jest niezbędny do tego, aby aplikacja musiała poprawnie się skompilować. Jest to uwarunkowane w samym języku. Niestety przez to musimy napisać sporo kodu lub jest generowany automatycznie przez IDE. Wadą tego jest nieczytelność, powtarzalność kodu, z którego i tak musimy skorzystać. Taka sytuacja nazywa się Boilerplate

W tym wpisie pokaże Ci, w jaki sposób możesz zoptymalizować i przyspieszyć pisanie kodu za pomocą biblioteki Butter Knife (może wielu z Was ją zna, a dla tych, którzy ją nie znają na pewno przypadnie do gustu).

Czym jest boilerplate code?

Boilerplate code nie ma nic wspólnego z wydajnością i oznacza standardowy kod, który jest potrzebny do uruchomienia aplikacji. Jest to kod, prawie identyczny w każdej aplikacji. Taki kod jest nudny, powtarzalny, zaśmiecający czytelność klas. I co najgorsze, nie można z niego zrezygnować. Ponieważ jest potrzebny, aby połączyć w całość pozostałe fragmenty aplikacji. Boilerplate w Androidzie może to być metoda findViewById(), z której i tak musisz skorzystać, a dodatkowo generuje sporo kodu.

Uzupełnij wiedzę o: findViewById w pętli for

Butter Knife

Biblioteka Butter Knife pomoże nam skrócić nasz kod oraz poprawi czytelność kodu. Sama biblioteka służy do „wstrzykiwania” widoków w Androidzie za pomocą adnotacji (Annotation Processing). Zobaczmy jak to w praktyce wygląda.

W standardowy sposób kod może wyglądać następująco::

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.text);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buttonClick("Click");
            }
        });
        textView.setText("Text");
    }
    private void buttonClick(String text) {
        Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
    }
}

A po zastosowaniu biblioteki i modyfikacji kodu może on wyglądać tak:

public class MainActivity extends Activity {
    @BindView(R.id.text) TextView textView; // Dawniej findViewById
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Wymagana inicjacja
        ButterKnife.bind(this);
        // Tutaj bez zmian
        textView.setText("Text");
    }
    // Akcja po klknięciu
    @OnClick(R.id.button)
    void buttonClick() {
        Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
    }
}

Prawda, że proste i wygodne? Jeżeli chcemy skorzystać z tego narzędzia we fragmencie musisz użyć:

ButterKnife.bind(this, view);

zamiast

ButterKnife.bind(this);

Oczywiście to nie koniec możliwości tej biblioteki. Jakie jeszcze możemy mieć adnotacje?

@BindString()
@BindDrawable()
@BindColor()
@BindDimen()
@OnLongClick
@OnItemClick
...

i wiele innych.

Podsumowanie

Usuwanie boilerplate z naszego kodu jest bardzo przydatne. Dzięki temu nasz kod jest bardziej czytelniejszy i łatwiej nad nim zapanować. Korzystanie z biblioteki Butter Knife jest bardzo proste, intuicyjne, a korzyści naprawdę spore. Każda biblioteka ma swoje plusy i minusy, dlatego nie dla każdych rozwiązań nadaje się to rozszerzenie, więc za nim włączysz ją do swojego projektu, pomyśl, czy warto. Nie zmienia to faktu, że też trzeba pamiętać o stosowaniu wzorców projektowych.

Co dalej?

  • Polub stronę MYENV na Facebooku oraz śledź mnie na Twitterze
  • Zachęcam do komentowania i pisania propozycji tematów, o których chcesz przeczytać
  • Poleć ten wpis za pomocą poniższych przycisków. Będę Ci za to bardzo wdzięczny 🙂
  • Życzę Ci miłego dnia i miłego kodowania 🙂