programmazione, java, fastidio November 6, 2005 4:41 pm (Save post)
Zefram si lamenta per gli argomenti insensati degli esami. Ne avrei da dire pure io ma sto seguendo troppo poco per farlo ![]()
Ad ogni modo, mi attacco per un rant a questo:
l docente mostra una slide con scritto Da C a Java (sola andata) - e io commento: “sta scherzando, vero?”. Solo perché un linguaggio è type safe, garbage collected e portabile mica vuol dire che è meglio; se poi è Java - beh, lasciamo stare…
Premesso che beh, in effetti IMO java è meno vulnerabile del C per un bel po’ di ragioni, vorrei insistere sul fatto che java non è type safe.
I buchi nel type system di java (che ci sono anche nella versione 5 AFAIK) sono almeno tre, e prima o poi ci sbattono la testa tutti:
NullPointerException, quel simpaticone
Il semplice spezzone di codice:
String string= null;
string.concat( "hello");
fa un bel botto. Certo, questo è banale, ma un null pointer capita fin troppo spesso in bocca ad un metodo.
ClassCastException, il rompiscatole
Non solo questo codice fa esplodere allegramente il nostro programma:
Object foo=new Object();
String string = (String) foo;
ma questo:
Object foo=null;
String string = (String) foo;
va bene, col risultato che magari qualche bug finisce pure nascosto.
La cosa bella è che per evitare un’eccezione bisogna fare un bel controllo con instanceof.
Il che è assolutamente uguale a quello che si fa nei linguaggi in cui i controlli sui tipi si fanno a runtime (con la differenza, che almeno. in questi l’equivalente di null è un oggetto, il che ha parecchi vantaggi).
ArrayStoreException, il subdolo
Il codice incriminato è questo:
Object obj[] = new String[3];
obj[0] = new Integer(0);
I tecnicisti direbbero che il problema è che gli array in java sono covarianti.
Il problema, di nuovo, non è in queste semplici assegnazioni, ma nel passaggio di parametri. Se io passo un array di List dove il metodo si aspetta un array di Object il programma fa un bel botto.
La cosa bella è che questi problemi non sono intrinseci ai linguaggi con tipi statici. Essi possono essere risolti, semplicemente i progettisti di java non l’hanno fatto.
Va poi considerato che java ha tutta una serie di altri problemi che potrebbero essere risolti in maniera migliore. Ad esempio, per iterare su un array si fa a mano, il che è error prone (ecco a voi ArrayOutOfBoundException) mentre in altri linguaggi esistono meccanismi builtin per farlo che evitano questi errori (ma forse il for in java 1.5 risolve questo problema?).
Vabè, però sono solo i puristi che dicono che la dimensione di un array fa parte del tipo (dependent types, hint hint)
Boh, mi pare che ce ne siano anche altri ma al momento non mi vengono in mente, ma il punto è: java non è type safe come vogliono farvi credere

