Più istruzioni var in JavaScript

4

Scrivere una singola dichiarazione var per funzione è considerata buona per leggibilità e manutenibilità.

Ma quando ho esaminato alcune delle librerie standard, la loro versione di sviluppo non segue rigorosamente questo. Ad esempio, codice Underscore ha più istruzioni var in molte funzioni che vengono distribuite casualmente e dichiarate come richiesto.

C'è qualche ragione per non seguire la regola singola-var?

    
posta akp 20.02.2014 - 11:51
fonte

2 risposte

7

Si tratta principalmente di preferenze e gusti personali e dello stile di codifica che stai utilizzando ( NPM , jQuery , Idiomatic.js , ecc.), poiché ci sono argomenti validi sia a favore che contro più istruzioni var.

Oleg citato commentando. Se si utilizza una singola istruzione, i commenti suddivideranno il codice in un modo che potrebbe ridurre la leggibilità. Il rientro dei commenti può sembrare strano (non allineato) a seconda di come indentate, ma potete sempre fare qualcosa del genere:

var
  /** This variable does this */
  variableOne = 1,

  /** This variable does that. */
  variableTwo = 2

Oleg cita anche commenti JSDoc, che potrebbero rompere ulteriormente le cose:

var
  /**
   * This variable does this.
   * 
   * @private
   */
  variableOne = 1,

  /**
   * Object containing preferences for X. Access by calling
   * the public API method Y or whatnot.
   *
   * @private
   * @example
   * . . .
   *
   * @property {Object} preferences A can of fresh preferences
   * @property {Boolean} preferences.optionA Enable something
   * @property {Boolean} preferences.optionB Disable something
   * @property {String} preferences.optionC Name something
   */
  preferences = applyPreferencesToDefaults(userPreferences, {
    optionA: false,
    optionB: true,
    optionC: 'Hello'
  })

Un altro argomento per l'utilizzo di più affermazioni è che è leggermente più facile spostarle, e c'è meno rischio di problemi relativi a virgola o punto e virgola (come uscire casualmente quando si sposta una linea).

NPM sostiene lo stile virgola prima (e senza punto e virgola) per evitare tali problemi (che incidentalmente allinea anche ordinatamente le dichiarazioni, se si utilizzano due spazi):

var variableOne = 'one'
  , variableTwo = 'two'
  , variableThree = 'three'

Gli argomenti per l'utilizzo di una singola istruzione var includono: sembra migliore / più semplice / più pulito; è meno digitante, è come funziona il javascript JavaScript; ti costringe a dichiarare in alto; Crockford dice che sei un idiota se non lo fai; è una religione e / o un culto più supponente di quello di Satana.

Alla fine, l'argomento più importante funziona altrettanto bene per entrambe le parti: consistenza .

Se usi uno stile coerente, che dovresti, non importa se c'è una var su ogni riga o una virgola a sinistra. È importante non fare religioso su queste cose. Inoltre, un minificatore decente manipolerà il codice proprio per lo stesso one-liner in ogni modo.

I personalmente preferisco le istruzioni multiple var semplicemente perché mi piace commentare con precisione le mie variabili, ma sto perfettamente bene con entrambi i modi.

Ora, se tutti potessimo essere d'accordo sul fatto che entrambi gli stili funzionano e che la coerenza è molto più importante della scelta effettiva, che mondo meraviglioso sarebbe. Diamine, non può essere divertente accenderlo una volta ogni tanto?

Questo post di Ben Alman esamina tutto in dettaglio, con altri esempi I commenti sono, ovviamente, anche molto interessanti.

Aggiornamento

Ho appena letto qualcos'altro di interessante, di Isaac di NPM:

Two var statements gzip better than a single var with a comma.

È da un commento a questo Gist , in cui Isaac spiega perché sceglie la virgola prima per NPM. I commenti sono molto interessanti.

    
risposta data 01.03.2014 - 22:17
fonte
3

JavaScript consente sia le dichiarazioni var singole che multiple in un dato ambito. Tuttavia, dietro le quinte, in realtà le converte in una singola dichiarazione di sollevamento variabili nella parte superiore dello scope.

La flessibilità del linguaggio in questo senso consente stili diversi. Puoi scegliere quello che vuoi e molti sviluppatori lo fanno.

Ad esempio, se si utilizza jsdoc e si desidera scrivere commenti per variabile, allora I personnaly pensa che più istruzioni var siano un modo per andare, altrimenti i commenti lunghi potrebbero far sembrare che tu sia come te dichiarando variabili globali:

/**
 * something about a
 */
var a = 'a',

    /**
     * something about b
     */
    b = 'b'; // <-- it looks like b is in global scope here

Ma per rafforzare la disciplina e rendere il codice più comprensibile e leggibile - usa la singola istruzione var e il codice del lint con JSLint o JSHint.

    
risposta data 20.02.2014 - 12:30
fonte

Leggi altre domande sui tag