Introduzione
“Scala The Good Parts = Kotlin?” è il titolo provocatorio di un messaggio apparso due anni fa nella sezione dedicata a Scala su Reddit [1]. Al di là della provocazione, il numero crescente di articoli e menzioni a Kotlin su siti e mailing list sembra confermare che l’utilizzo di questo linguaggio non sia più limitato ad una ristretta nicchia di progetti, ma possa essere considerato a buona ragione nello sviluppo di nuove applicazioni, sia in ambito Android che lato server, come complemento o sostituto di Java.
In questo primo articolo parliamo delle origini del linguaggio, delle caratteristiche che lo rendono appetibile e degli ambiti in cui può essere utilizzato proficuamente.
L’origine di Kotlin
Kotlin nasce come progetto interno a JetBrains [2], l’azienda fondata nel 2000 a Praga produttrice di molti popolari ambienti di sviluppo tra cui IntelliJ IDEA (per linguaggi eseguiti dalla Java Virtual Machine), PyCharm (per Python), PhpStorm (per PHP).
Nel 2011 JetBrains, sotto la guida di Dmitry Jemerov, decise di lanciare un nuovo linguaggio di programmazione per la Java Virtual Machine che garantisse una maggiore produttività rispetto a Java, considerandone oramai l’evoluzione troppo lenta a causa della necessità di mantenere la compatibilità con le numerose versioni precedenti.
Dopo aver considerato e scartato Scala per la sua complessità e l’eccessiva lentezza del compilatore, si decise di sviluppare un linguaggio completamente interoperabile con Java, che implementasse molte delle funzionalità avanzate introdotte da Scala e da altri linguaggi moderni, ma che fosse, molto più pragmaticamente, semplice da apprendere e orientato a semplificare e velocizzare lo sviluppo software.
Il linguaggio Kotlin, con il suo compilatore e le librerie standard, è stato rilasciato con licenza open source (Apache 2 License) a inizio del 2012, e i codici sorgenti sono disponibili su Github [18].
Obiettivi, caratteristiche e ambiti di utilizzo
L’obiettivo primario di Kotlin è di mettere a disposizione dello sviluppatore un linguaggio di programmazione conciso e produttivo che sia completamente interoperabile con Java in entrambe le direzioni: Kotlin permette di utilizzare senza alcuna complicazione librerie Java pre-esistenti e, a loro volta, le applicazioni scritte in Kotlin sono invocabili da Java.
Come Java, Kotlin è un linguaggio staticamente tipato, ma offre una type inference molto più potente che permette di omettere, in molti casi, il tipo di ritorno di un metodo (o il tipo di una variabile) quando questo possa essere determinato dal compilatore analizzando il codice.
Kotlin inoltre supporta sia il paradigma di sviluppo orientato agli oggetti che quello funzionale; le funzioni sono first class functions: possono essere assegnate a variabili, utilizzate come parametri di altre funzioni o restituite come risultato. Come ogni linguaggio funzionale, Kotlin offre molte strutture dati immutabili (liste e mappe, ad esempio), mantenendo però le classiche strutture dati mutabili che sono utilizzate in Java.
Tra gli altri vantaggi che Kotlin offre rispetto a Java elenchiamo:
- la possibilità di utilizzare extension functions per aggiungere funzionalità a classi esistenti (incluse le classi della librerie standard di Java e Kotlin) senza doverle estendere esplicitamente;
- un migliore supporto per i tipi generici;
- l’utilizzo di nullable types per dichiarare oggetti che possono essere nulli al momento dell’esecuzione, semplificando lo sviluppo di codice null safe;
- la possibilità di referenziare gli argomenti dei metodi attraverso i loro nomi;
- le data classes, una sintassi semplificata per creare classi del tutto simili a JavaBeans con una sola riga di codice.
Kotlin per lo sviluppo di applicazioni Android
Il primo ambito in cui ha senso considerare l’adozione di Kotlin è lo sviluppo di applicazioni Android. Google, nel maggio 2017, ha infatti annunciato il supporto ufficiale per Kotlin in Android Studio 3.0 [4], e lanciato una sezione dedicata su Android Developers [5].
Il paragrafo “Applicazioni sviluppate con Kotlin” sul sito conta nomi importanti come Slack, Lyft, Evernote, Deliveroo, Pinterest e altre svariate decine. Non mancano numerose librerie open source sviluppate appositamente per Kotlin e Android che semplificano lo sviluppo di applicazioni mobili [17].
Il blog ufficiale di Android spiega la scelta [6] — una sorpresa per molti visto che Google è attiva nello sviluppo di altri linguaggi di programmazione come GoLang — come diretta conseguenza dell’adozione massiccia del linguaggio da parte degli sviluppatori di applicazioni mobili, della perfetta interoperabilità con Java e della sua maturità.
È importante anche notare come Kotlin sia completamente compatibile con Java 6, per cui utilizzare la sintassi avanzata offerta da questo linguaggio non comporta nessun problema di compatibilità con Android.
Kotlin per lo sviluppo di applicazioni lato server
Kotlin sta guadagnando consensi anche nello sviluppo di applicazioni lato server come microservizi o applicazioni web. Anche in questo caso le ragioni vanno individuate nella possibilità di creare in maniera molto più concisa servizi complessi che utilizzano i più popolari framework di sviluppo come Spring o Hibernate.
Parlando dello Spring Framework, Pivotal Software — che lo mantiene e sviluppa — ha ufficialmente iniziato a supportare il linguaggio nella versione 5.0 [7]. In questo caso l’integrazione è ancora più avanzata, visto che sono state introdotte nuove estensioni specifiche per Kotlin che permettono di utilizzare dei DSL (Domain Specific Language) per semplificare configurazione e sviluppo di applicazioni. Spring Boot 2.0 [8], la nuova versione del framework per sviluppare microservizi con lo Spring Framework, introduce ufficialmente il supporto.
Altri utilizzi: Kotlin multipiattaforma
Le ambizioni della comunità di sviluppo di Kotlin non si limitano ad applicazioni mobili o lato server; infatti, con la versione 1.2 del linguaggio da poco rilasciata, JetBrains ha introdotto delle funzionalità sperimentali per rendere il linguaggio completamente multipiattaforma.
Kotlin for JavaScript [9] offre la possibilità di compilare un’applicazione Kotlin in JavaScript (ECMAScript 5.1 per la precisione). Il codice compilato può essere utilizzato come applicazione client-side, permettendo ad esempio di sviluppare una applicazione web completa in Kotlin, dalla parte visuale al back-end, oppure lato server congiuntamente ad altre tecnologie come Node.js.
Kotlin/Native [10] permette di compilare applicazioni Kotlin in codice nativo per un gran numero di piattaforme tra cui Windows, Linux, MacOS, iOS e Android. Come spiega l’annuncio ufficiale sul blog di JetBrains [11], l’obiettivo non è rendere qualsiasi applicazione Kotlin compilabile su ogni piattaforma, ma più realisticamente fornire un linguaggio attraverso il quale sia possibile creare librerie realmente riutilizzabili non solo per progetti sulla JVM, ma da piattaforme/linguaggi completamente diversi come .NET o GoLang.
Inutile nascondere che una parte rilevante dell’interesse per questo progetto sia legato alla possibilità di creare applicazioni iOS, che permetterebbe di utilizzare Kotlin per sviluppare applicazioni per Android e iPhone, le due più popolari piattaforme mobili.
Come iniziare
Nei prossimi articoli in questa serie andremo ad analizzare le caratteristiche del linguaggio e svilupperemo una semplice applicazione. In questi paragrafi finali vediamo invece come iniziare a familiarizzare con Kotlin.
IDE
Essendo Kotlin una creazione di JetBrains, il miglior IDE per iniziare a sviluppare è IntelliJ IDEA [12]. La Community Edition, scaricabile gratuitamente dal sito, offre un supporto avanzato al linguaggio, incluse le funzionalità a cui siamo abituati come refactoring automatico fino al supporto per applicazioni multipiattaforma introdotto in Kotlin 1.2.
Eclipse, l’altro popolare ambiente di sviluppo per applicazioni Java, offre pure un buon supporto attraverso il plugin Kotlin Eclipse [13] che dev’essere installato dall’Eclipse Marketplace. Ovviamente gli sviluppatori Android possono contare sul supporto al linguaggio offerto da Android Studio 3.0, l’ambiente di sviluppo basato su Eclipse.
Non ci sono buone notizie invece per i fan di NetBeans, il cui plugin ufficiale è stato abbandonato per poco interesse da parte degli utilizzatori [19].
REPL
Kotlin offre una REPL (Read–Eval–Print Loop) che può essere attivata da IntelliJ, Eclipse o via linea di comando [14]. Una volta attivata (in Figura 1 la finestra su IntelliJ IDEA), è possibile definire funzioni, classi o semplici comandi in Kotlin che vengono immediatamente interpretati dal compilatore.
Try Kotlin
Per provare Kotlin senza installare nulla sul proprio computer è possibile usare Try Kotlin [15], un servizio online che mette a disposizione un editor di codice per creare (e salvare) semplici applicazioni. La cosa più interessante di questo servizio è il fatto che offra una moltitudini di esempi (alcuni tratti dal libro Kotlin in Action [16]), oltre che un buon numero di esercizi (Kotlin Koans).
Convertitore Java-to-Kotlin
Visto che per molti il miglior modo per imparare un nuovo linguaggio è utilizzarlo per qualche progetto reale, perché non partire da un progetto che state sviluppando e chiedere all’IDE di tradurre una (o più classi) in Kotlin? Sia IntelliJ IDEA che Eclipse offrono la comodissima funzionalità Java-to-Kotlin Converter. Selezionate una classe, cliccate su Java-to-Kotlin Converter, e osservate il vostro IDE automaticamente tradurre il codice in Kotlin. Non sempre il risultato è perfetto ma è un ottimo punto di partenza.
Conclusioni
Ci sono molti motivi per provare Kotlin: l’interoperabilità (in entrambe le direzioni) con Java, la maturità del linguaggio e la sua pragmaticità lo rendono un complemento ideale (o addirittura un sostituto) a Java per lo sviluppo di applicazioni Android o lato server.
Ciò che sorprende il programmatore Java che si trovi a creare un nuovo progetto in Kotlin è la semplicità con cui si apprende il nuovo linguaggio, utilizzandone inizialmente solo i costrutti di base e imparando gradualmente quelli più idiomatici; tutto il bagaglio di conoscenze di Java è completamente riutilizzabile, assicurando un livello accettabile di produttività fin dal primo giorno.
Nei prossimi articoli in questa serie andremo ad analizzare più in dettaglio le caratteristiche del linguaggio e a dimostrare come sviluppare alcune semplici applicazioni.