E’ da un pò ormai che non pubblico qualcosa e per farmi perdonare ho deciso di iniziare una serie di articoli su Scala.
Scala? Si, Scala è un linguaggio di programmazione, un ennesimo linguaggio di programmazione che cerca di essere bello, pulito, chiaro e perfetto. Come tutti i lingaggi di programmazione, giusto?
Ebbene Scala è un linguaggio di programmazione non proprio giovane. E’ stato teorizzato per la prima volta nel 2001 da Martin Odersky e pubblicato per la prima volta nel 2004. Chi è l’autore? Beh se ci sono i Java generics dovete chiederlo anche a lui, così come anche il compilatore di Java.
Vabbè ma parliamo di Java o di Scala?
Parliamo di Scala, ma Java c’entra, eccome. Il compilatore di Scala trasforma il codice in Java bytecode, questo vi permette di usare in Scala dipendenze scritte in Java e quindi di interoperare con tutto il vasto ecosistema di Java. E questo è un vantaggio, secondo me, perchè possiamo partire già da una base consistente.
Inoltre chi si avvicina a Scala e conosce Java è avvantaggiato, in quanto, volendo e noi non vogliamo, possiamo scrivere il codice in Java, fare qualche piccola modifica alla sintassi e spacciarlo per Scala.
Ma perchè allora usare Scala se poi alla fine possiamo scrivere in Java il nostro codice?
Per una ragione: sintesi.
A me non piace il codice lungo, un codice elegante per me è un codice breve, senza troppi fronzoli, comunicare in poche righe cosa stiamo facendo.
Scala è Breve?
Scala, vi garantisco, è breve. Molto breve.
Scordatevi il codice boilerplate di Java, tutte quelle righe per fare una query nel database, per restituire una coppia di valori come tipo di ritorno da un metodo, ecc…
Scala è potente?
Scala è potente, potente quanto Java.
Scala è un linguaggio di programmazione funzionale?
Scala è principalmente un linguaggio di progammazione funzionale. Tratta le funzioni come first class citizen… Cioè?
Potete passare ad un metodo una funzione, potete far restituire ad un metodo una funzione, potete a partire da una funzione costruire una nuova funzione di ordine superiore, e così via.
Scala è un linguaggio di programmazione Object Oriented, imperativo?
Scala è anche un linguaggio di programmazione object oriented ed imperativo. Potete scrivere il vostro bel codice usando gli if, i for, le classi, le interfacce (trait in Scalese) nella stessa maniera di come avreste fatto in Java (meglio se in Java8).
Scala è semplice?
Ni. NI?
Sì ni, non è nè semplice nè difficile. O meglio non ha tanti costrutti come Java e tante regole come Java, d’altronde sarebbe quasi impossibile… il problema di Scala è il diverso modo di vedere le cose.
Ma questo non dipende da Scala, dipende dal paradigma di programmazione che stiamo usando.
Io mi sono avvicinato a Scala, perchè con Java, spesso, avevo l’impressione come di avere una camicia di forza, di non poter fare le cose in maniera semplice, naturale. Scala, se usato bene, permette di fare molte cose carine più semplicemente e questo non è solo dovuto alle API, ma dal modo di risolvere i problemi, di approcciare i problemi.
Io mi sforzo di risolvere i problemi in maniera funzionale e non imperativa, e per questo motivo è difficile, almeno per me.
E’ difficile perchè devo educarmi ad avere un approccio funzionale al problema e non imperativo.
Un esempio?
Avete una lista di interi e volete eliminare da questa lista gli elementi dispari.
In Java 7 avreste usato un ciclo for e un if, in Scala?
Una sola funzione “filter”, avreste cioè filtrato gli elemente pari (per chi conosce Java 8, sa di cosa sto parlando).Ed è questa la difficoltà maggiore. Combiare le tante, ma tante, funzioni che le API di Scala ci mettono a disposizione al fine di risolvere il nostro problema, senza che noi dobbiamo descrivere cosa fare… cicla, poi per ogni elemento controlla se è pari e se è pari aggiungilo ad una collection, ma combinare le funzioni, viste come blocchetti di lego, per risolvere il problema.
La difficoltà che ho incontrato io è stata proprio quella di affrontare in maniera funzionale il problema e combinare le funzioni tra loro in modo da risolvere il problema.
Scala è leggibile?
Scala è leggibile, molto leggibile se avete capito come funziona (vedi punto precendente), altrimenti no. Certo, alle volte nella sua volontà di essere breve rischia di essere troppo breve rendendo il codice un pò criptico però sta a noi evitare, in base al contesto, alcune delle shortcuts che ci mette a disposizione il linguaggio ed usare la versione estesa, un pò più verbosa ma più semplice da leggere anche a chi si è avvicinato non da molto a questo linguaggio di programmazione.
E quindi?
Quindi io sto cercando di studiarmelo e di applicarlo appena ne ho la possibilità.
Non sono un esperto, è vero e quindi il mio codice non è perfetto, però quando lo rivedo mi piace.
E mi piace perchè rileggendolo a distanze di settimane lo capisco.Ed è breve.
La mia idea è di pubblicare una serie di post per facilitare l’accesso, a chi ne avesse voglia, all’utilizzo di Scala.
Volete sapere se lo uso per lavorare o solo per divertirmi un pò?
Lo uso, anche, per lavorare, anche, se, ovviamente non è il linguaggio di programmazione principe (Java) ma, sì, lo uso.




