mercoledì 5 ottobre 2011
Di questa caratteristica avevo già parlato in un post di qualche anno fa, ma proprio non la digerisco: getMonth è base 0, mentre getDate è base 1.
I miei amici sanno che "rompo" un pò sulla storia della base 0, di cui capisco benissimo l'origine legata agli indirizzi di memoria (visto che sono Ing. Elettronico qualcosa mi dice); però ritengo che un linguaggio di alto livello debba mascherare questo aspetto. Mi sta bene che un ciclo, concetto prettamente informatico, vada su base 0; ma che una funzione di una classe DateTime mi restituisca 1 per dire che siamo a Febbraio fatico a digerirlo. Quando poi penso che la funzione getDate è a base 1 e non c'è coerenza la fatica aumenta.
Questa caratteristica è banale e abbastanza innocua, ma secondo me tradisce l'origine del linguaggio: in Javascript (come in certe versioni del C mi sembra) si può omettere il ; di fine istruzione tra due istruzioni che stanno su due righe diverse oppure nelle istruzioni a fine programma o comunque seguite da una }
I problemi sono due: certe istruzioni vengono interpretate in modo "poco intuitivo" e inotre si crea una dipendenza tra le diverse istruzioni, nel senso che se aggiungo un'istruzione sotto a quella senza ; devo ricordarmi di correggere anche quella sopra. Ecco un esempio di interpretazione che potrebbe confondere:
var y = x + f
(a+b).toString()
viene interpretata come
var y = x + f(a+b).toString();
A questo punto mi chiedo: non sarebbe meglio rendere obbligatorio il ; a fine istruzione ed avere tanti ragionamenti in meno sia per me che per il parser? Con tutto il codice che scrivo non saranno mica proprio i ; finali a farmi venire l'artrite alle mani ... Mi sembra più una caratteristica messa lì da un programmatore che voleva dimostrare quanto è bravo a fare un parser ...
Vero è che basta non ricordarsi di questa cosa e usare sempre il ; per evitare problemi.
Premessa: ritengo che Javascript sia uno dei linguaggi che si DEVONO conoscere al giorno d'oggi se si vuole fare web (e magari anche mobile); il problema è che pur usandolo io mi ci sono sempre trovato a disagio. Parte di ciò è sicuramente dovuto al fatto che non ho mai approfondito per bene il linguaggio, per cui questi giorni ho iniziato la lettura di "Javascript: the Definitive Guide", che mi sembra ben scritto e approfondito. Un'altra parte del disagio è dovuto a caratteristiche del linguaggio che poco si sposano con la mia filosofia (ben poco geek lo so, ma penso che nell'informatica ci sia bisogno sia di geek che di non geek come me ...). Ho deciso di "esplicitare" queste caratteristiche a me antipatiche nella speranza di riuscire a "digerirle emotivamente" e così da ricordarmene e non incappare in errori banali.
Partiamo con la prima: in javascript i numeri non interi sono solo in notazione floating point; anche in ECMAScript 5 non esiste ancora nulla che assomigli ai numeri decimali. Questa secondo me è una grave mancanza, perchè ritengo che anche Javascript sia usato molto più spesso per fare calcoli con importi monetari piuttosto che con valori usati in ambito matematico/scientifico.
Mi sembra assurdo che un linguaggio di alto livello, nell'anno 2011, mi dica che 0.3 - 0.2 != 0.2 - 0.1 (provare per credere in qualsiasi browser!). Questa mi ci vorrà un pò a digerirla ...