{"id":12487,"date":"2017-05-02T15:22:03","date_gmt":"2017-05-02T13:22:03","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12487"},"modified":"2017-05-02T15:22:03","modified_gmt":"2017-05-02T13:22:03","slug":"meno-codice-boilerplate-con-project-lombok","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/meno-codice-boilerplate-con-project-lombok\/","title":{"rendered":"Meno codice Boilerplate con Project Lombok"},"content":{"rendered":"<p>Java \u00e8 indubbiamente uno dei linguaggi pi\u00f9 conosciuti al mondo ma, purtroppo, si \u00e8 spesso guadagnato la fama di essere anche molto\u00a0prolisso. Per questo, esistono diverse librerie che tentano di ridurre la quantit\u00e0 di codice ripetitivo da scrivere &#8211;\u00a0comunemente chiamato\u00a0codice <em>boilerplate &#8211;<\/em>\u00a0e\u00a0<a href=\"https:\/\/projectlombok.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Lombok<\/a>,\u00a0che conosciamo, oggi \u00e8 proprio una di queste.<\/p>\n<p>Pensiamo a quando una semplice classe deve custodire alcuni membri privati da manipolare tramite quel tipo di metodi conosciuti come\u00a0<em>getters<\/em> e <em>setters<\/em>. Questi, insieme a\u00a0costruttori e override dei metodi <em>hashCode<\/em> e <em>toString<\/em>, sono un&#8217;incombenza in capo al programmatore. Il codice da scrivere non \u00e8 sicuramente dei pi\u00f9 complessi anche perch\u00e8 ormai tutti gli IDE pi\u00f9 comuni si sono attrezzati prevedendo comandi da menu per la creazione automatica dei getters e setters. Lombok permette di utilizzare apposite <em>annotation<\/em> per\u00a0la creazione automatica di questa tipologia di metodi al fine di garantire pi\u00f9 leggibilit\u00e0 al codice e produttivit\u00e0 allo sviluppatore.<\/p>\n<p>Ad esempio, la seguente classe:<\/p>\n<pre class=\"lang:java decode:true\">@Getter\r\npublic class Studente {\r\n    private String nome;\r\n    private String cognome;\r\n    private String matricola;\r\n}<\/pre>\n<p>preveder\u00e0 gi\u00e0 tutti i getter per i membri in virt\u00f9 dell&#8217;annotazione indicata. Lo stesso si potrebbe fare con @Setter per quanto riguarda i metodi setter o\u00a0@RequiredArgsConstructor per \u00a0i costruttori passando per\u00a0<a href=\"https:\/\/projectlombok.org\/features\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">molte altre<\/a> fino a @Data che fornisce un equipaggiamento completo per la classe.<\/p>\n<h2>Lombok in Android Studio<\/h2>\n<p>Lombok pu\u00f2 essere integrato semplicemente in<a href=\"https:\/\/projectlombok.org\/download.html\" target=\"_blank\" rel=\"noopener noreferrer\"> vari modi<\/a> e per quanto riguarda Android Studio si pu\u00f2 ricorrere all&#8217;utilissimo meccanismo di Gradle:<\/p>\n<pre class=\"lang:java decode:true\">compile 'org.projectlombok:lombok:1.16.10'<\/pre>\n<p>Si faccia solo attenzione che affinch\u00e8 l&#8217;IDE riesca ad utilizzare le funzionalit\u00e0 di Lombok \u00e8 necessario:<\/p>\n<ul>\n<li><strong>installare l&#8217;apposito plugin<\/strong> seguendo il menu <em>File &gt; Settings &gt; Plugins<\/em>.\u00a0Una volta cliccato il pulsante <em>&#8220;Browse repository&#8221;<\/em> si potr\u00e0 effettuare la ricerca del Lombok plugin;<\/li>\n<li><strong>abilitare l&#8217;Annotation Processing<\/strong>. Per farlo, si chiuda il progetto &#8211; qualora aperto &#8211; e si entri nella configurazione alla voce<em> &#8220;Build, Execution, Deployment&#8221; &gt; Compiler &gt; Annotation Processors<\/em>, spuntando il flag\u00a0<em>&#8216;Enable annotation processing&#8217;<\/em>.<\/li>\n<\/ul>\n<p>Riaprendo a questo punto il progetto che vede Lombok tra le sue dipendenze, ci accorgeremo che la classe che espone le annotation di cui abbiamo parlato potr\u00e0 essere utilizzata con tutto il set di metodi generati dalla libreria.<\/p>\n<p>Java \u00e8 magnifico ma un p\u00f2 pi\u00f9 di produttivit\u00e0 in pi\u00f9 non guasta mai pertanto impariamo ad apprezzare gli strumenti come Lombok e tutto ci risulter\u00e0 pi\u00f9 agevole.<\/p>\n<p>Alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java \u00e8 indubbiamente uno dei linguaggi pi\u00f9 conosciuti al mondo ma, purtroppo, si \u00e8 spesso guadagnato la&#8230;<\/p>\n","protected":false},"author":561,"featured_media":13008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1682,7],"tags":[1278,1541,1526,1773],"class_list":["post-12487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-strumenti-di-sviluppo","tag-android","tag-android-studio","tag-java","tag-lombok"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12487"}],"version-history":[{"count":5,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12487\/revisions"}],"predecessor-version":[{"id":13009,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12487\/revisions\/13009"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13008"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}