Spesso sento che c'è qualcosa di sbagliato quando codice blocchi come:
function foo (arg){ // arg: a SomeClass object
...
}
o
function foo (arg){
if (Object.prototype.toString.apply(arg) !== '[object Array]')
throw new Error("Parameter must be an array");
...
}
. Con un linguaggio tipizzato staticamente non dovrei né chiarire il tipo di argomento previsto né verificare la conformità a questa aspettativa. Inoltre, la possibilità di specificare un tipo di reso rende il codice ancora più descrittivo.
OTOH alcuni casi si prestano al codice di auto-documentazione:
function parse (json){
...
}
. Nell'esempio sopra, è abbastanza ragionevole supporre che i tuoi utenti API sapranno sia cosa dovrebbe fare la funzione, sia quali valori degli argomenti saranno accettabili.
Tuttavia altre volte chiarendo l'intento del codice scegliendo nomi "chiarificanti" si otterrebbero nomi lunghi e scomodi che mischiano il tipo atteso di una variabile e il suo ruolo .
Sto utilizzando linguaggi dinamici con una mentalità sbagliata?
Quali convenzioni, tecniche, modelli possono salvarne uno dal dover scrivere brutti codici di controllo del tipo e / o eccessivamente a seconda dei commenti?