Let’s get functional: il linguaggio Scala

Siamo a casa di Ginetto, un programmatore molto simpatico che ha passato la notte precedente  interamente sveglio a scrivere codice, ah dimenticavo di dirvi che è domenica mattina e il nostro amico sta ovviamente dormendo, ma questa incantevole scena viene stravolta da un imprevisto perché come nei peggiori incubi di ogni italiano suona il campanello, quindi Ginetto si sveglia di soprassalto e dopo aver bofonchiato qualcosa di incomprensibile e aver allungato il braccio verso il comodino alla ricerca degli occhiali si avvia verso la porta con l’andatura di uno zombie in cerca di cervello: The Walking Dead Coder.
Ginetto: “Sia dannata la classe Object, è domenica mattina… chi è?”
Ora dovete sapere che dietro la porta non si nasconde un Testimone di Geova, ma molto peggio, un attivista programmatore del linguaggio Scala, che capendo subito l’antifona pensa : “Cavolo, ha maledetto la classe radice di tutte, dev’essere un programmatore Java molto arrabbiato… mi sa che l’ho svegliato! Meglio andarci piano!”

Attivista: “Buongiorno, posso rubarle un po’ di tempo per parlarle del linguaggio Scala?”
G: “Ma non bastavano i Testimoni del Genoa?” (notate che fa un po’ di confusione, ma capitelo… si è appena svegliato)
A: “Ma quello che voglio proporle è molto meglio, mi dia solo una decina di minuti”
G: “Mmmmm… io ho passato l’intera nottata a scrivere codice, lei deduco di no visto che si    trova qui, mi viene logico pensare che questo suo linguaggio non sia molto utilizzato né richiesto, a che posizione dell’indice TIOBE si trova?”
A: “Ehm… le interessa davvero? Comunque si trova al 37mo posto” (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
G: “Ci avevo preso quindi…” (qui il nostro Ginetto non nasconde la soddisfazione)
A: “Ma secondo RedMonk si trova al 12mo, e non è male visto che tiene conto della presenza dei vari linguaggi su GitHub e Stack Overflow” (http://redmonk.com/sogrady/2013/07/25/language-rankings-6-13/)
G: “Vabbè mi hai dimostrato che queste classifiche non sono fondamentali per la scelta di un linguaggio… ma visto che mi hai appena svegliato ora preparo il caffè per tutti e due, entra così mi parli di questo Scafa”
A: “Scala, linguaggio Scala… Scafa sta in provincia di Pescara”
G: “Vabbonè che mo t’ha da mett a ffà lu puntiglios la domenic ammattin’?”
A: “Frechete lo zì, quess è roba seria!”
Così i due si siedono e prendono un caffè insieme (rigorosamente Saquella) e si mettono a discutere molto amichevolmente in dialetto pescarese, ma quello che si sono detti ve lo riassumo io in italiano corrente che si fa prima.

La prima domanda, quella più ovvia… Che cos’è Scala? Beh, la risposta più immediata che mi viene in mente è: “prendete Java, aggiungetegli il paradigma di programmazione funzionale, mischiate bene ed ecco fatto!”. Si tratta di una definizione immediata, ma aiuta a rendere l’idea, Scala infatti è un ibrido perché prende le caratteristiche migliori di Java mentre migliora alcuni suoi aspetti che hanno fatto storcere il naso a più persone e più volte e ci aggiunge la programmazione funzionale.

Si può dire che lo scopo principale di Scala sia quello di essere un linguaggio scalabile (da qui il nome: SCAlable LAnguage e si pronuncia così all’italiana senza accenti da what’s american improbabili), infatti è adatto sia per scrivere script di poche righe di codice, sia per sviluppare progetti di grande complessità.

Ho scelto di usare Java come suo “rivale” perché i due linguaggi sono strettamente legati, per farvi capire meglio vi descrivo le principali caratteristiche.

  • Compilando codice Scala avremo bytecode interpretabile dalla JVM, questo significa che basterà aver installata la Java Virtual Machine sul nostro sistema (ovviamente qualsiasi esso sia) per poter programmare. Anche per Scala vale quindi il motto “Write once, run everywhere”, ma sta a voi comunque non farlo trasformare in “Run once, bugs everywhere” (cit. volutamente presa dal mio amico Simone, gli offrirò una tazzina di Java per ripagarlo dei diritti). Inoltre può anche essere interpretato dalla virtual machine di Microsoft per la piattaforma .NET
  • Con il rilascio di Java 8, finalmente anche lui avrà il supporto del paradigma funzionale, con introduzione di lambda expressions e funzioni di ordine superiore, quindi, se vogliamo, possiamo considerare Scala come precursore della futura evoluzione di Java. I vantaggi di programmare in maniera funzionale sono notevoli, ma non basta questo articolo neanche per introdurli, magari un giorno leggerete di un altro incontro tra programmatori fan uno della programmazione imperativa e l’altro di quella funzionale.
  • Avremo libero accesso a tutte le classi di Java, in quanto il tipo Object di java non è altro che un sottotipo di AnyRef in Scala (qui Ginetto ha strabuzzato gli occhi, ciò che credeva essere superiore non lo era poi così tanto). Questo è utile per chi si è avvicinato da poco a questo nuovo linguaggio e vuole concentrarsi più sulla sintassi e mantenere l’uso delle collezioni di Java, ma attenzione… in questo caso niente funzioni di ordine superiore 😛 . Per quanto riguarda la gestione delle stringhe, invece, si usa pari pari la classe java.lang.string
  • Oltre a questo, Scala migliora alcuni degli aspetti di Java, infatti è un linguaggio puramente orientato agli oggetti, ciò significa che tutto è un oggetto e non esistono puntatori, quindi possiamo dire addio ai tipi primitivi e anche a classi e metodi statici, infatti c’è un modo molto più intuitivo e diretto per rappresentare oggetti singleton. In Java anche non esistono puntatori ad eccezione di null (il puntatore all’indirizzo 0 di memoria, causa di non si sa quanti milioni di dollari di danni per bug nel codice dovuti al suo utilizzo), qui non c’è più bisogno perché quando scriviamo null indichiamo l’unica istanza conosciuta della classe Null. Inoltre gran parte dei suoi problemi sono risolti dall’introduzione della classe Option e dalle sue sottoclassi Some e None. Quindi possiamo dire che è anche più coerente da un punto di vista “filosofico” con il paradigma a oggetti 🙂 .
  • Tramite l’eliminazione di alcune parole chiave e una sintassi più snella il codice scritto risulta molto meno verboso (anche senza l’utilizzo delle lambda expressions) e molto più comprensibile, un vantaggio sicuramente per il riuso e la manutenibilità del codice stesso. Una grande spinta in questo verso è data anche dalla possibilità di uso del pattern matching, che rende il codice ancora più chiaro ed espressivo.
  • Essendo un linguaggio multiparadigma avremo a disposizione più soluzioni possibili ad uno stesso problema, tutte corrette, ma ovviamente a seconda dei casi alcune saranno più adatte di altre, sta a noi programmatori scegliere valutando ogni impatto su prestazioni, verbosità e leggibilità del codice.
  • Come ultimo punto c’è da dire che la documentazione di Scala è molto vasta e scritta bene, considerando che stiamo parlando di un linguaggio che ha avuto la sua prima release nel 2003, è ancora un ragazzino con principio di acne in fondo.

Beh ovviamente la chiacchierata tra i due programmatori è andata avanti ancora per molto, chi d’altra parte non sarebbe interessato a questo linguaggio, che qualcuno si è azzardato a definire “il linguaggio del futuro”, neanche fosse uscito dopo la caduta del disco volante a Roswell. Ovviamente non ha senso dire quale dei due linguaggi sia meglio o peggio, anche perché la scelta dell’uno o dell’altro dipende non solo dalle sue caratteristiche ma anche dalla sua effettiva diffusione sul mercato, soprattutto per quanto riguarda i framework in circolazione che ne fanno utilizzo (ed è infatti uno dei motivi dell’aumento della diffusione del PHP). In definitiva prendete spunto da questa storiella per conoscere un linguaggio nuovo, che non fa mai male, e poi deciderete se apprezzarlo come è successo a me oppure abbandonarlo.Nel caso vogliate dare un’occhiata al sito, da poco con una nuova veste grafica, ve lo linko qui:
http://www.scala-lang.org/

Nei prossimi articoli spiegherò passo passo come iniziare a programmare in Scala analizzando tutte le sue caratteristiche.
A presto 🙂 .

PS: La scelta del nome “Ginetto” è un tributo alla mitica triade Maccio Capatonda, Herbert Ballerina e Ivo Avido

The following two tabs change content below.

Giulio Marini

Studente pescarese di Ingegneria Informatica all'Università di Roma3 con la passione per la musica e per il calcio. Fanboy poderoso del linguaggio Scala e dei film di Sergio Leone, il mio peggior incubo è di ritrovarmi completamente senza capelli ad un concerto dei Nirvana pieno di ammiratori di Quentin Tarantino!

Ultimi post di Giulio Marini (vedi tutti)

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.