domenica 23 novembre 2014

Meglio coffeescript, ma gli spazi sono importanti

Considerato che con lo stack MEAN si scrive molto piu' codice javascript rispetto agli altri ambienti, vale la pena usare Coffeescript, che non e' un linguaggio alternativo a javascript, ma un modo diverso di scrivere javascript che il compilatore coffescript produce corrispondenti file .js

Il codice e' piu' compatto, piu' comodo da scrivere e modificare, lo stile del codice e' meno soggetto a scelte stilistiche dei programmatori e quindi risulta piu' leggibile, e alla fine tutto questo garantisce maggiore sicurezza rispetto alla presenza di bug.

Invece di usare parentesi graffe aperte e chiuse, si usa l'indentazione.

Poi scompare il punto e virgola per la fine dell'istruzione e le parentesi per racchiudere gli argomenti sono opzionali.
Pero' richiede anche un po' piu' di attenzione, guardate ad esempio questi due pezzi di codice che hanno una piccolissima differenza:
1:
Anagrafica.findById anagraficaid
 .populate('conto')
 .exec (err, anagrafica) ->

2:
Anagrafica.findById anagraficaid
 .populate('conto')
 .exec(err, anagrafica) ->

ovvero un semplice spazio tra la chiamata ad exec e la parentesi tonda.
Questo spazio per coffeescript fa in modo che i due codici abbiano due significati diversi:

1:
Anagrafica.findById(anagraficaid).populate('conto').exec(function(err, anagrafica) {
2:
return Anagrafica.findById(anagraficaid).populate('conto').exec(err, anagrafica)(function() {
La freccia -> e' il corrispondente di definizione di funzione, function
Quindi entrambe le righe finiscono con la definizione di una funzione.
Ma nel primo caso, gli argomenti tra parentesi tonde (err, anagrafica) essendo staccati da .exec, sono argomenti della function, mentre nel secondo siccome sono attaccati, sono argomenti della .exec e la function e' una funzione senza argomenti.
Nel primo caso gli argomenti della funzione exec non sono racchiusi tra parentesi, perche' le parentesi su coffeescript (quando possibile) sono opzionali.
Quindi
.exec (err, anagrafica) ->
   ...
con lo spazio, corrisponde a
.exec( (err, anagrafica) ->
   ...
)

Nessun commento:

Posta un commento