Butterknife, l'arma contro il boilerplate code

Nella programmazione, il boilerplate code o boilerplate si riferisce a sezioni di codice che devono essere incluse in molti posti senza cambiare molto. E’ un termine che si utilizza molto quando si parla di linguaggi di programmazione considerati verbosi, nei quali il programmatore deve scrivere molto codice senza produrre molto.

Se hai mai programmato un’app Android con Android Studio ti sarai reso conto che purtroppo il boilerplate code è molto presente. Una semplice applicazione infatti può richiedere molto codice senza fare poi molto. E’ qui che ci viene incontro una semplice libreria creata da Jake Wharton chiamata Butter Knife.

Per utilizzarla, assicurati di aggiungere le seguenti linee di codice ai tuoi build.gradle files. Configura il tuo build.gradle file a livello di progetto per utilizzare il plugin ‘android-apt’ e successivamente usalo a livello di modulo e aggiungi butterknife alle dependencies. dependencies

build.gradle progetto

buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

build.gradle modulo

apply plugin: 'android-apt'

android {
  ...
}

 {
  compile 'com.jakewharton:butterknife:8.2.1'
  apt 'com.jakewharton:butterknife-compiler:8.2.1'
}

Ora il nostro lavoro sarà più semplice. Infatti, se abbiamo molti oggetti di tipo View nella nostra applicazione, dovremmo perdere tempo e chiamare findViewById per ogni View che vogliamo utilizzare dinamicamente. Per esempio

Senza butterknife

class ExampleActivity extends Activity {
  TextView tv1;
  TextView tv2;
  TextView tv3;
  .............
  TextView  tv10;


  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    tv1 = findViewById(R.id.tv1);
    ............................
    ............................
    tv10 = findViewById(R.id.tv10);
    // finalmente possiamo iniziare a lavorare sui nostri fields
  }
}

Con Butterknife ci basterà referenziare i field tramite il comando @BindView, e successivamente all’interno della classe onCreate chiamare ButterKnife.bind(this). Ecco come cambia l’esempio precedente.

Con ButterKnife

class ExampleActivity extends Activity {
 @BindView(R.id.tv1) TextView tv1;
 @BindView(R.id.tv2) TextView tv2;
 @BindView(R.id.tv3) TextView tv3;
 .............
 TextView  tv10;


 @Override public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.simple_activity);
   ButterKnife.bind(this);
   // Pronti per lavorare sui nostri fields
 }
}

Per quanto riguarda gli onClickListeners, ButterKnife ci semplifica ancora la vita. Ecco come possiamo crearne uno in modo semplice.

OnClickListener

@OnClick(R.id.submit)
public void saluta(Button button) {
  button.setText("Ciao!");
}

Ci sono poi altre funzionalità che potrebbero essere d’aiuto. Se sei interessato consulta la documentazione ufficiale.