Tutti i programmatori conoscono Java e chi non lo conosce quantomeno ne ha sentito parlare. Chi utilizza Java per lavorare, ma anche solo per scopi personali, sa che per rispettare al massimo il principio dell’incapsulamento quando si utilizza un pojo (un oggetto contenente delle proprietà e i soli metodi per accedere e settare queste proprietà) è costretto a scrivere tante linee di codice per i classici metodi getter e setter delle proprietà private che il pojo possiede, ma anche per creare i vari costruttori di cui si ha la necessità. Molto spesso la cosa che si fa, e scrivere le proprietà private del pojo e generare tutti i metodi classici (getter/setter, costruttori ecc) in maniera automatica, attraverso strumenti che ci mette a disposizione il nostro IDE di sviluppo. Si capisce subito come è facile avere delle classi con più di 100 linee di codice, non è sempre bello avere classi “lunghe” soprattutto se al livello di logica non fanno nulla, ma cosa peggiore, quando si cancella una proprietà privata della classe bisogna eliminare anche i rispettivi metodi getter e setter e rivedere nel caso anche i costruttori.
Come direbbero i fantastici inglesini:
We have a boilerplate code
Dicesi boilerplate code una sezione di codice che viene ripetuta molte volte all’interno del programma, che può o non può avere piccole cose diverse. In italiano un boilerplate code può essere tradotto come codice verboso.
Ma esiste una soluzione a questo cavolo di boilerplate 😡?……La risposta è LOMBOK.
La libreria lombok, all’inizio questa parola ci potrebbe spaventare un pochino, permette di creare getter, setter, toString, equals, hashCode e costruttori in maniera automatica, ma la cosa figa e che all’interno della classe non li vediamo, i metodi ci sono ma non si vedono è FIGHISSIMO :). È necessario scrivere la classe, con le proprietà che si desidera, dopodiché aggiungere le annotation di lombok, vediamo tra poco cosa sono le annotation, ed il gioco è fatto.
Per mostrare i vantaggi di questa libreria farò un esempio, sperando di farvi apprezzare la potenza di lombok. Vi anticipo solo in breve quali sono i vantaggi che possiamo avere:
Prima di tutto importiamo la dipendenza di Lombok, è possibile scaricarla al seguente link: https://mvnrepository.com/artifact/org.projectlombok/lombok-maven scegliete la versione che vi serve e il vostro gestore di dipendenze (es. maven, gradle ecc).
@Data public class User implements Serializable { @NonNull private String name; @NonNull private String surname; @NonNull private String dateOfBirth; }
Possiamo notare 2 annotation Data e NonNull:
@ToString
, @EqualsAndHashCode
, @Getter
/ @Setter
e @RequiredArgsConstructor
if (name == null) throw new NullPointerException("name");
Adesso andiamo a vedere come sarebbe stata la classe senza l’aiuto del nostro nuovo amico Lombok.
public class User implements Serializable { private String name; private String surname; private String dateOfBirth; public User() { } public User(String pName, String pSurname, String pDateOfBirth) { this.name = pName; this.surname = pSurname; this.dateOfBirth = pDateOfBirth; } public String getName() { return name; } public String getSurname() { return surname; } public String getDateOfBirth() { return dateOfBirth; } public String setName(String pName) { if (name == null) throw new NullPointerException("name is required"); this.name = pName; } public String setSurname(String pSurname) { if (pSurname == null) throw new NullPointerException("surname is required"); this.surname = pSurname; } public String setDateOfBirth(String pDateOfBirth) { if (pDateOfBirth == null) throw new NullPointerException("date of birth is required"); this.dateOfBirth = pDateOfBirth; } }
È facile notare come la classe User che non fa uso della libreria Lombok, è molto più verbosa rispetto alla classe User che fa uso di Lombok. Inserendo i classici metodi getter e setter più il costruttore parametrico non solo inseriamo la sezione di codice chiamata boilerplate, ma è facile introdurre bug come: dimenticare un metodo setter o un metodo getter, dimenticare un controllo null ecc.. invece grazie a Lombok non corriamo mai questi problemi.
public User(String name, String surname, String dateOfBirth) { this.name = name; this.surname = surname; this.dateOfBirth = dateOfBirth; }
Spero di avermi fatto apprezzare la vera forza di questa libreria, come sempre vi lascio alcuni link utili che vi possono essere d’aiuto nel momento in cui volete approfondire meglio l’argomento, per quanto mi riguarda merita davvero tanto.
Documentazione ufficiale: https://projectlombok.org/
Tutte le annotation di Lombok: https://projectlombok.org/features/all
Guida (in inglese) sull’uso di Lombok: https://gualtierotesta.wordpress.com/2014/03/03/tutorial-using-lombok-to-reduce-boilerplate-code-in-java/
P.s. Se l’articolo vi è stato di vostro gradimento condividetelo sui vostri social, potete sempre lasciare un commento (spero sia positivo 🙂 ) anche per richiedere un articolo su qualche tecnologia che vi aggrada. Vi ringrazio per la lettura e per la visita. Mi raccomando sempre #programmingModeOn