Due mesi di Kotlin: prime impressioni

E così, inaspettatamente (per me), ho deciso di studiare Kotlin.

Dico inaspettatamente perché non lo avevo minimamente considerato. Nemmeno presente nelle opzioni possibili. Eppure ci sono cascato anch’io…

Il primo contatto con Kotlin lo ebbi circa tre anni fa, suggeritomi da un mio ex collega androidiano. Complice il fatto che in quel periodo ero convinto che il mio prossimo linguaggio di programmazione sarebbe stato Groovy, lo avevo guardato con poco interesse. Sintassi “strana”, qualche somiglianza di troppo con il C#… (lo so, ho dei pregiudizi) e poi lo avevo associato a qualcosa di strettamente legato al mondo Android.

Col tempo ho poi abbandonato Groovy (e mi sono convinto definitivamente di non essere portato per i linguaggi dinamici); ma rimaneva la voglia di studiare qualcosa di nuovo…

Così ho fatto una cosa molto semplice: ho chiesto un consiglio.

Quale linguaggio studiare?

Tra i suggerimenti più stuzzicanti c’erano Elixir, Clojure e ovviamente Kotlin.

Dopo una decade abbondante di collaborazione con Java, avevo bisogno di qualcosa di “fresco”. Qualcosa che mi facesse tornare la gioia di scrivere codice e che mi permettesse di esplorare nuovi modi di farlo. Un linguaggio più snello ed espressivo di Java. E che, magari, supportasse nativamente il paradigma funzionale.

Allo stesso tempo però non mi andava di mettere da parte l’esperienza acquisita in questi anni sull’ecosistema Java/JVM. Per cui ho deciso di dare priorità al linguaggio di casa JetBrains. (Sì, perché, tempo permettendo, conto di fare conoscenza anche con gli altri due “sfidanti”! 🙂)

Kotlin è un linguaggio complesso e sfaccettato e dopo due mesi di studio e sperimentazione (io lo sto mettendo alla prova sul back end) posso dire di averne scalfito solo la superficie. Una prima idea però me la sono fatta…

Cosa mi piace di Kotlin

Sono davvero molte le caratteristiche interessanti di Kotlin, alcune delle quali mutuate da altri famosi linguaggi come C#, Java, Groovy, Scala (e probabilmente molti altri che non conosco…); ne riporto quindi solo una manciata.

Come già accennato, il fatto che Kotlin nasca come linguaggio basato sulla JVM è un grande vantaggio per uno sviluppatore Java. La totale interoperabilità tra i due linguaggi è uno dei principi base che hanno guidato lo sviluppo di Kotlin (che garantisce retrocompatibilità fino alla versione 1.6 della JVM). Questo non solo significa che è possibile utilizzare classi o librerie Java in applicazioni Kotlin, ma anche viceversa.

L’espressività del linguaggio è… spettacolare! 😃 Conciso e dritto al punto. Alcuni esempi? Date un’occhiata a Properties, Data classes e lambda, per iniziare. Dite pure addio a get + set (e a librerie come Lombok), a costruttori “anemici” e a illeggibili classi anonime.

E poi dite addio anche alle NullPointerException a runtime, Kotlin infatti è un linguaggio null safe. Il che permette di identificare le null reference in fase di compilazione. Davvero fico!

Infine, il supporto per la programmazione funzionale. In Kotlin le funzioni sono, come si suol dire, first-class citizen, ovvero possono essere assegnate a variabili, passate come argomenti di altre funzioni o metodi e, in particolare, posso essere definite come oggetti con esistenza propria, anche all’esterno di una classe. Questo permette, a tutti gli effetti, di lavorare con un linguaggio multi-paradigma.

Cosa mi piace di meno…

Per il momento le cose che mi fanno storcere il naso sono davvero poche. Più che di difetti parliamo di “scomodità” legate al mio modo di pensare e scrivere codice in stile Java (o C, se vogliamo).

Ad esempio l’assenza, in alcuni casi, di modificatori di accesso prima della dichiarazione di variabili o funzioni/metodi, mi lascia a volte disorientato.

Oppure, il fatto di dover indicare (quando necessario) il tipo della variabile dichiarata dopo il nome della stessa, mi spiazza! 😁

La type inference è davvero molto comoda, ma a volte, se non esplicitato, può risultare un po’ difficile capire cosa uscirà da una funzione. O addirittura se qualcosa uscirà… vista l’opzionalità del return (anche questo, solo in alcun casi).

Insomma, come dicevo, non si tratta di difetti, piuttosto di differenze sintattiche che richiedono di acquisire nuove abitudini. In ogni caso, per chi già lavora con Java, la curva di apprendimento è praticamente piatta.

In conclusione

Esiste il linguaggio di programmazione perfetto?

Inutile illudersi: la risposta è no.

Citando una nota declinazione della legge di Murphy riguardante la programmazione:

Non c’è linguaggio in cui sia difficile scrivere cattivi programmi.

Ma sicuramente esistono linguaggi più versatili e più smart di altri: Kotlin sembra essere uno di questi… voi che ne pensate?

Vi tengo aggiornati sui miei esperimenti! 😉

Alla prossima,

David