2012-09-02 6 views
12

Non me ne sono reso conto fino a poco tempo fa, ma uso lo Allman style quando si scrive codice javascript.È vero che dovrei usare lo stile di K & R quando scrivo javascript?

Secondo http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/ Dovrei usare K&R style. Questo perché in alcune situazioni il posizionamento della parentesi graffa sulla riga successiva può causare problemi. Il problema per me è che sono diventato piuttosto affezionato allo stile Allman e preferisco non cambiarlo.

Quindi, la mia domanda (s)

  • E 'vero che lo stile Allman può causare errori dovuti alla posizionamento di parentesi graffe in JavaScript? Che ne dici di jquery?

  • C'è qualche trucco che mi consente di utilizzare lo stile Allman senza problemi a causa di parentesi graffe?

  • Esistono altri problemi associati all'utilizzo di questi stili?

+3

Immagino che dipenda da quanto spesso restituite i letterali dell'oggetto –

+0

Non riesco a vedere alcun problema che possa sorgere, tranne la leggibilità. Tuttavia K & R sembra avere più senso per me, poiché dichiaro spesso funzioni e/o oggetti all'interno di chiamate di funzione (ad es. 'SetTimeout (1000, function() {complex_functions_content});' Il contenuto della funzione complessa sarebbe in un la nuova riga e le parentesi di chiusura (sia quella riccia che quella rotonda) si trovano nell'ultima riga, sullo stesso livello di indentazione della chiamata della funzione setTimeout. Scrivere un codice simile con lo stile Allman apparirebbe strano IMHO – Mark

+0

Questo è spaventoso .. –

risposta

8

E 'vero che lo stile Allman può causare errori dovuti alla collocazione di parentesi graffe in JavaScript?

Sì, lo è. Come spiegato dal link, le istruzioni return seguite da una nuova riga confonderanno il parser nel tentativo di inserire un punto e virgola. Questo comportamento non è limitato alla restituzione dei letterali degli oggetti, comunque. La seguente funzione:

function foo() 
{ 
    return 
     "bar"; 
} 

Restituisce anche undefined.

Che ne dici di jquery?

La situazione rimane esattamente la stessa indipendentemente dal fatto che jQuery sia incluso o meno.

C'è qualche trucco che mi consenta di utilizzare lo stile Allman senza problemi dovuti a parentesi graffe?

Sì, non utilizzare lo stile Allman con valori letterali oggetto. Considera di voler assegnare un oggetto letterale a una variabile. Hai davvero intenzione di scrivere:

var foo = 
{ 
    bar: "quux" 
}; 

O andrai per:

var foo = { 
    bar: "quux" 
}; 

IMHO il secondo frammento è più leggibile rispetto alla prima. È possibile continuare a utilizzare lo stile Allman con le parentesi all'interno di for, if, while, function, ecc., Ma creare un'eccezione per i letterali degli oggetti.

Ci sono altri problemi associati all'uso di questi stili?

return è un caso abbastanza particolare, perché è valido con o senza argomento. Quando si confronta con una sola dichiarazione return su una riga, il parser non può stabilire se è necessario aggiungere un punto e virgola per rendere valida la dichiarazione di riga singola, oppure continuare alle righe successive e sperare per il meglio.

Per questo motivo, penso che questo comportamento diventi un problema solo con return e forse throw, non altre istruzioni.

+0

questo comportamento è conforme alle specifiche e [diventa un problema * non solo * con 'return'] (http://stackoverflow.com/a/12234451/1081234) –

+1

@ ov, in pratica,' continue' e 'break' prendere un identificatore opzionale, non un oggetto letterale. 'fai ...while' pone problemi solo se 'while' valuta un oggetto letterale, che probabilmente è un modo abbastanza complicato per implementare un ciclo infinito. Il tuo punto su "gettare" è, tuttavia, anche se il lancio di oggetti letterali è piuttosto raro nella mia esperienza. –

+1

Non mi stavo concentrando sullo specifico scenario dell'OP con parentesi, ma piuttosto sull'incapacità dell'utente di suddividere le linee dopo quelle affermazioni in generale (cioè no 'continue'↵' [label]', duh), ma la capacità di una persona di interrompere le linee tutte le volte che desiderano dopo condizionali ecc. –

2

Tenete a mente ECMAScript specification regarding automatic semicolon insertion:

Alcune dichiarazioni ECMAScript (istruzione vuota, dichiarazione variabile, istruzione di espressione, do-while dichiarazione, continue dichiarazione, break dichiarazione, return dichiarazione, e throw dichiarazione) deve essere terminato con punto e virgola. Tale punto e virgola può sempre apparire esplicitamente nel testo di origine . Per comodità, tuttavia, tale punto e virgola può essere omesso dal testo di origine in determinate situazioni. Queste situazioni sono descritte dicendo che il punto e virgola viene automaticamente inserito in il flusso di token del codice sorgente in quelle situazioni.

rido sopra il suggerimento che è "conveniente" ...

Mentre è tecnicamente potrebbe potrebbe continuare a utilizzare la formattazione Allman nei casi non contemplati sopra, vorrei predicare coerenza. Personalmente sono un fan di Google JS styleguide - le sezioni relative alla tua domanda sono le code formatting e semicolons. Gli esempi elencati qui valgono la pena di provarlo.

Problemi correlati