Perché i pacchetti di nodi mettono una virgola su una nuova riga?

5

Sono learning node.js e sto provando Express. La mia prima app aveva questo codice:

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

Leggendo il tutorial di mangusta mi dà questo:

var mongoose = require('mongoose')
  , db = mongoose.createConnection('localhost', 'test');

In modalità rigorosa, JSHint mi dà

app.js: line 6, col 32, Bad line breaking before ','.

Il che dimostra che non sono l'unico là fuori a essere infastidito da questa sintassi.

C'è qualche ragione per dichiarare var s in questo modo invece di aggiungere la virgola alla fine della riga?

    
posta SomeKittens 11.11.2012 - 00:38
fonte

5 risposte

11

Ho sentito che si chiama regola NPM "virgola-first" . Esempio dal doc:

var magicWords = [ "abracadabra"
                 , "gesundheit"
                 , "ventrilo"
                 ]
  , spells = { "fireball" : function () { setOnFire() }
             , "water" : function () { putOut() }
             }
  , a = 1
  , b = "abc"
  , etc
  , somethingElse

Il documento non indica la motivazione dietro questo stile di codifica, ma suppongo che sia per evitare errori di sintassi stupidi di inserire una virgola eccessiva alla fine di un elenco separato da virgole, e per alleviare la tassa mentale che pone su di te dal tentativo di ottenere quella parte della sintassi corretta.

Si noti inoltre che lo stile NPM consiglia "non utilizzare il punto e virgola" . Se si adotta questo stile, si elimina anche il punto e virgola che riempie la posizione finale di un'istruzione var, rendendo invece la tentazione di inserire una virgola.

Per quanto riguarda l'errore JSHint, è disponibile un'opzione per consentire le interruzioni di riga in stile virgola prima .

    
risposta data 11.11.2012 - 01:59
fonte
3

Per espandere un po 'il commento di ento sul problema della sintassi, JavaScript non ammette le virgole extra all'interno degli oggetti letterali. Ad esempio, in PHP si potrebbe assegnare un array come segue:

$foo = array(
      "thing 1",
      "thing 2",
      "thing 3", // <-- extra comma
);

La virgola extra significa che non devi dare un trattamento speciale all'ultima voce di una lista. Non è necessario ricordare di aggiungere la virgola se in seguito è necessario aggiungere qualcosa all'elenco e il controllo della versione deve solo tenere traccia di un cambio di riga.

In alcune versioni di JavaScript (JScript), tuttavia, la virgola finale causa errori. Quindi devi lasciarlo fuori. Successivamente, quando aggiungi cose devi ricordarti di aggiungerlo e il controllo della versione deve tracciare due modifiche.

Aggiungere la virgola all'inizio di ogni riga anziché alla fine significa che non devi trattare l'ultimo elemento in modo speciale. Se si utilizza la virgola principale e si omettono i punti e virgola, gli elementi non si devono mai preoccupare quando si aggiungono o rimuovono elementi da un elenco.

    
risposta data 11.11.2012 - 03:15
fonte
2

Penso che il motivo principale sia che, se aggiungi un elemento extra, crei una modifica "aggiungi nuova riga" nel tuo sistema di controllo versione, piuttosto che una modifica "Sostituisci riga con 2 nuove righe", con l'unica passa alla prima riga aggiungendo una virgola.

Strumenti come git-blame riportano quindi il commit in cui hai aggiunto parti relative al nuovo elemento, piuttosto che l'elemento successivo.

    
risposta data 19.11.2012 - 14:24
fonte
0

Per un lettore umano, la virgola principale indica che la linea è una continuazione di quella sopra - anche se personalmente ritengo che la rientranza da sola faccia bene quel lavoro.

Dopo aver controllato le regole per l'inserimento automatico del punto e virgola sembra sorprendente che ciò provocherebbe un errore in un analizzatore statico. Forse gli autori hanno solo un assaggio.

    
risposta data 11.11.2012 - 01:26
fonte
0

Almeno non c'è una ragione tecnica. Da un punto di vista tecnico, sembra addirittura una cattiva idea, considerando la tendenza dei motori JS di aggiungere punti e virgola ovunque credano di averne bisogno.

Esteticamente, è proprio come il vecchio problema OneTrueBraceStyle: chiedi a 5 persone, ottieni (almeno) 5 risposte diverse.

    
risposta data 11.11.2012 - 02:08
fonte

Leggi altre domande sui tag