Chi mi conosce sa bene il mio rapporto di amore-odio con Java. Amore perché Java è un linguaggio performante, di alto livello e soprattutto portabile. L’ho usato spesso, lo uso tutt’ora e ci ho fatto addirittura del game development. Odio perché, proprio perché ci ho combattuto tanto, ne conosco tutti i difetti, i limiti e le idiosincrasie. Java è sintatticamente prolisso e ha qualche problema di “vecchiaia” che andrebbe risolto (ed il confronto con C# è impietoso).
Giusto per fare un esempio in Java è abitudine leggere (o scrivere) codice raccapricciante quale
che in C# si risolve con un semplice
Qualcuno considererà questa caratteristica (tecnicamente si parla di Accessor e Mutators) un puro vezzo sintattico, ma quando si lavora con decine e decine di classi vi posso assicurare che questo facilita di un fattore dieci la produttività e la manutenibilità del codice. Problemi come questo ed altri più “concreti” sono ciò che mi hanno spinto a passare al lato oscuro della forza ogni qualvolta mi è possibile.
In attesa che Java venga riformato (sperando nella rivoluzionaria (?) versione 8 e 9 del linguaggio) la comunità si è messa in moto in modo autonomo. Uno dei progetti a mio avviso più interessanti è senza dubbio Ceylon, di Red-Hat.
Ceylon è un linguaggio JVM-based, ovvero che viene compilato generando byte-code compatibile con la Java Virtual Machine. Questo garantisce due vantaggi: il linguaggio sfrutta la portabilità e le ottime performance della JVM ed è potenzialmente compatibile con le librerie Java esistenti.
Ceylon è un linguaggio molto interessante perché non solo alleggerisce Java da tutti gli inutili orpelli sintattici di cui è infestato ma aggiunge anche una sorta di dinamismo opzionale nella gestione delle variabili (tramite il tipo jolly value). Ma facciamo qualche esempio.
by "Gavin"
see (goodbye)
throws (IOException)
void hello() {
value message = "Hello,
World!";
print(message.normalized);
}
Come non partire dal mitico “Hello, World!”? In realtà non è un “Hello, World!” semplice perché ci mostra due nuove caratteristiche del linguaggio. La prima è il modo con cui vengono documentati metodi e classi: niente commenti, ma una sintassi specifica che può essere letta dal generatore di documentazione integrato di Ceylon. La seconda è il tipo variabile value
che può essere usato per simulare una certa dinamicità del linguaggio. Da notare però che nessuno ci obbliga ad usarlo: se siamo sicuri che la variabile message
sia una stringa possiamo direttamente dichiararla come tale tramite String message
.
Un’altra funzionalità molto utile è l’operatore di null check. Vediamolo in azione:
In questo esempio troviamo i due operatori in azione. Il primo è l’operatore “?”. Considerando il codice precedente, tale operatore restituisce name.uppercased
se e solo se quest’ultimo è diverso da null
, altrimenti restituisce il valore che lo segue (in questo caso la stringa “WORLD”). L’altro operatore nell’esempio è “?.”. Quest’ultimo fa in modo che si acceda alla funzione/attributo uppercased
se e solo se name
è diverso da null
. Questi due operatori ci risparmiano quindi tutta una serie di noiosi “if” annidati!
Le caratteristiche di Ceylon sono numerosissime e per maggiori informazioni vi rimando alla loro pagina ufficiale. Ceylon è ancora in fase di sviluppo ma è già possibile scaricare delle versioni preliminari!
Come se non bastasse è in progetto lo sviluppo di un backend che compili Ceylon in JavaScript rendendone possibile l’uso anche per lo sviluppo di applicazioni web.
Insomma, Ceylon è un progetto che vi consiglio caldamente di tenere d’occhio!
Scusa se preciso ma il tuo esempio iniziale è sbagliato.
Se in Java scrivi:
foo.setAttributeX(bar.getAttributeY());
in C scrivi
foo.attributeX = bar.attributeY;
oppure viceversa
Se in java scrivi
foo.setX(bar.getY());
in C scrivi
foo.X = bar.Y;
PS: anche io programmo in Java e ho un rapporto di amore-odio ma il primo prevale per fortuna 🙂
Se sei così interessato alla portabilità del java e vuoi provare qualcosa di diverso mi sento in obbligo di consiglarti clojure, just to learn something no OOP
Pingback: Visto nel Web – 22 « Ok, panico