GB

Sapere prima di fare (sulla coincidenza)

Published on

Ecco un altro episodio che mi ha insegnato come sia necessario sapere prima di fare.

Il compito che mi era stato assegnato era semplicissimo: mostrare una data formattata in JavaScript, tipo 7 Ottobre 2012. Che difficoltà poteva esserci?

JavaScript fornisce l’oggetto Date che ha molti metodi e, scorrendo nella documentazione, senza leggere il compito di ogni metodo ho selezionato:

Creo il mio script. Dato che mi avevano richiesto che il mese fosse visualizzato con il nome in Italiano, ho creato un array con tutti i vari nomi:

var mesi = ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 
  'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 
  'Dicembre'];
var date = new Date();
console.log(date.getDay() + ' ' + mesi[date.getMonth()] + ' ' + 
  date.getFullYear());

Questo succedeva il 5 Ottobre 2012, che per la cronaca era un Venerdì. Guardo l’output: 5 Ottobre 2012. Perfetto, tutto funziona.

Il giorno dopo Sabato 6 Ottobre 2012 faccio un controllo: 6 Ottobre 2012: tutto OK.

Oggi, Domenica 7 Ottobre 2012, ricevo un IM, in cui mi avvertono che la data in output è strana. Corro a controllare: 0 Ottobre 2012.

Cos’era successo?

Non riuscivo a capire cosa potesse significare quel valore. Quand’è così, vado sempre alle basi, quindi in questo caso, alla documentazione. Come era prevedibile, l’errore era umano.

La mia ignoranza mi aveva portato a credere che Date.getDay() restituisse il giorno del mese. Invece il suo compito è restituire il giorno della settimana, da 0 a 6, 0 essendo Domenica, e 6 essendo Sabato. La funzione corretta per recuperare il giorno del mese è Date.getDate().

Come hai potuto sbagliare?

In questo caso l’ignoranza è andata di pari passo alla più totale coincidenza di eventi: lo script è stato creato Venerdì 5 Ottobre 2012, e getDay() ha restituito 5, riferito a Venerdì, mentre io ho letto 5 riferito al giorno del mese. Lo stesso è successo Sabato 6 Ottobre 2012. La Domenica, ovviamente, si è presentato il problema. Pura coincidenza.

Cosa hai imparato?

Studiare. Bisogna studiare, e mai affidarsi alle sensazioni perché quello che può essere ovvio per una persona non lo è per un’altra. Io probabilmente avrei chiamato le funzioni getDayOfWeek e getDayOfMonth, ma io sono io.

Inoltre, questo mi ha confermato che è vero che tutti i problemi si verificano sempre di Domenica!