Scala è un linguaggio di programmazione concepito per unire le potenzialità dei linguaggi basati sul paradigma Object Oriented con quelle dei linguaggi funzionali; dato che compilare i sorgenti realizzati in Scala genera del bytecode eseguibile su macchine virtuali Java, non di rado ci si chiede se il primo possa rappresentare un sostituto del secondo, interrogativo particolarmente interessante per i neofiti che si trovano a scegliere quale soluzione sia meglio adottare per il proprio lavoro.
Chiaramente non parliamo di utenti alle prime armi per quanto riguarda la programmazione, le differenze tra Scala e Java riguardano infatti aspetti che per essere analizzati richiedono alcune competenze di base. Uno di questi attiene per esempio la serializzazione e il parsing JSON, in Java abbiamo la libraria Jackson che utilizza la reflection API per il mapping ma supportando il ricorso alle Annotation. Scala prevede l'impiego di diverse librerie per questo formato, in molti casi esse non sono però incentrate sulla reflection.
La reflection è uno dei punti di forza di Java, essa consente ad un'applicazione di analizzare le classi che sono state utilizzare per la sua implementazione così come i nomi dei metodi, e qui troviamo un'importante differenza con Scala nella manipolazione di JSON.
Ma troviamo impostazioni differenti anche in un altro aspetto come quello relativo alla gestione delle dipendenze, infatti in Scala i parametri del costruttore sono accessibili dai metodi non-static (o regular methods) privilegiando servizi senza stato, in cui le comunicazioni sono tra loro indipendenti o, per meglio dire, non relazionate. Si tratta di un meccanismo spesso ricercato anche nello sviluppo Java based, ma non con gli stessi esiti di Scala.
Un ultimo fattore di distanza tra le due soluzioni riguarda l'accesso ai database e il ricorso agli ORM; in Java si tratta di un approccio diffuso, ma esiste una parte di sviluppatori che trovano meno problematico e più sicuro scrivere manualmente le istruzioni SQL, in Scala si preferisce invece affidarsi a librerie che supportano funzionalità come i parametri impliciti o l'interpolazione delle stringhe non disponibili in Java.
In conclusione siamo di fronte a due soluzioni differenti, lo sviluppo in Scala si affida meno a strumenti complementari come invece accade in Java con Spring o Hibernate privilegiando librerie compatibili con feature esclusive di un linguaggio. Trattandosi di due linguaggi per alcuni versi distanti prevedono stili di programmazione diversi e questa caratteristica non li rende completamente intercambiabili.
Per approfondire Denis Kalinin