2010-07-10 14 views
33

Al lavoro, posizioniamo le parentesi sulla linea successiva, ma a casa faccio il contrario. Quale preferisci? (K & R vs OTBS)parentesi JavaScript sulla nuova riga o no?

function something() { 
    // ... 
} 

function something() 
{ 
    // ... 
} 

Un sacco di librerie JavaScript sembra usare le OTBS (un vero stile brace). Mi piacerebbe seguirli per coerenza tra altri progetti JavaScript, ma non lo stile K & sembra più leggibile?

Nota: conosciamo il problema con il ritorno e le parentesi graffe in JavaScript, sarà sempre un'eccezione. Tuttavia, questo è solo un caso.

+7

@Deleters: Prima la votazione di eliminazione, si ricorda che il mix di risposte oggettivamente esaurisce i vantaggi e gli svantaggi di entrambi stile nel contesto JavaScript, senza essere polemico ... Alcune risposte danno un motivo tangibile per utilizzando lo stile K & R (a causa del problema dell'inserimento del punto e virgola), e cita una fonte molto autorevole (Crockford). –

+4

In effetti, penso che questa domanda abbia motivi tecnici (vedi la risposta di Daniel) per non essere soggettivi e piuttosto estremamente costruttivi. –

+3

Mentre combattiamo questa battaglia senza fine, i programmatori di pitone stanno ridendo a squarciagola: D –

risposta

28

Questa è una guerra santa a cui non avrai mai una risposta utilizzabile! Basta attaccare con qualsiasi cosa nel progetto stia usando e non discutere!

Per quello che vale, io sono un rito K &. Trovo che l'OTBS mette molto spazio visivo tra una struttura di apertura e la seguente affermazione, quando quelle due linee sono spesso fortemente correlate, quindi sarebbe meglio presentarle insieme, senza una riga quasi vuota interposta. Mi piace mantenere le mie righe vuote riservate per separare i blocchi di dichiarazioni correlate.

In uno stile di codifica che tuttavia molti spazi bianchi, questo può essere relativamente poco importante. Ma personalmente apprezzo la chiarezza, quindi posso mantenere più del programma sullo schermo.

Non mi rendo conto che avere la parentesi aperta su una colonna diversa rispetto alla parentesi graffa è un problema. È ancora facile vedere la forma del blocco solo dai trattini. A meno che non stiate usando i rientri sporgenti. Non farlo. Ma questa è un'altra guerra santa interamente.

+1

Utilizzate questa convenzione anche per altre lingue? Ti piace PHP? – Tower

+4

Personalmente, quando sono io che decido, sì. Se non lo sono, perché faccio parte di un progetto più ampio, non intendo forzare quella che è una preferenza in gran parte insignificante per tutti gli altri. – bobince

+3

Per la maggior parte delle lingue sono d'accordo sul fatto che questa è una guerra santa inutile e che la coerenza dovrebbe essere il fattore decisivo, ma penso che per Javascript l'inserimento automatico dei punti e virgola fornisca una vera argomentazione tecnica per le parentesi graffe aperte. Non sono sicuro di essere completamente d'accordo, ma si tratta di un argomento tecnico, piuttosto che religioso. – Keith

6

Nessuno dei due è migliore dell'altro. Basta sceglierne uno e usarlo in modo coerente.

+1

Concordo sul fatto che la coerenza è il fattore più importante, ma il primo salva uno spazio orizzontale e questo è il motivo per cui ora lo preferisco. – grm

+0

@grm: Preferisco anche il primo stile, perché è più simile alle convenzioni di denominazione di Java a cui sono abituato. Ma si può sostenere che il secondo stile si traduce in un codice più leggibile. Tuttavia, alla fine, IMHO, rispetto a fattori più importanti relativi alla scrittura di codice JavaScript corretto e gestibile, e considerando anche il fatto che la maggior parte degli IDE può formattare il codice in entrambi i modi in un clic (IntelliJ IDEA e WebStorm possono farlo), questo problema perde la sua importanza. – Behrang

3

Io li preferisco sulla stessa linea, ma soprattutto perché passo parecchio le funzioni anonime come argomenti ... risparmia un po 'di spazio e rende la definizione della funzione meno sgradevole. Ovviamente, questa è solo un'opinione e concordo con Bytecode Ninja sul fatto che la coerenza è la cosa più importante.

5

Tutto soggettivo. Alcuni sono leggermente migliori ma la differenza è trascurabile. La cosa più importante da fare è rimanere coerenti su tutto il codice.

Personalmente, preferisco lo stile nascosto, con 4 spazi 'reali' schede.

function a() { 
    if (b) { 
     do; 
    } else { 
     do2; 
    } 
}
+0

A nessuno piacciono gli spazi, io uso le schede. Non passerei tutto il mio codice convertendo le schede in spazi (anche con la funzione di sostituzione). Il codice che scrivi è un codice da inviare qui. Dare o prendere .. –

0

come sancito da molte risposte, la sua per lo più importante trovare uno stile che si (e/oi vostri compagni di squadra, se applicabile) rispettare. Personalmente preferisco la stessa linea di quella che ho trovato che mettere le parentesi graffe sulla nuova linea può portare a molte linee vuote se si lavora con chiusure e funzioni annidate, il che rende il codice meno leggibile per me (anche se, probabilmente, non per la maggior parte delle persone ...)

17

Seguo la convenzione di codifica JavaScript di Douglas Crockford, ispirata alle linee guida dello stile Java di Sun.

Ecco un link ad esso: http://javascript.crockford.com/code.html

+0

Volevo aggiungere lo stesso link. Quindi fai +1 per te: sei più veloce! Inoltre ti consiglio di verificare sempre il tuo codice javascript con JSLint (vedi http://www.jslint.com/). A proposito, è possibile verificare che entrambi gli stili di posizionamento delle parentesi siano corretti. – Oleg

+1

ottimo punto, perché il posizionamento delle graffe è davvero importante –

11

A mio parere, dipende da chi altro verrà a lavorare con il vostro codice. Se lavori su un team C# e condividi molte responsabilità, mettilo su una nuova riga ed evita gli inevitabili bisticci che altrimenti seguiranno. Se lavori con molti PHP (o vecchi programmatori JS), mettilo sulla prima riga per lo stesso identico motivo.

Ma se stai cercando qualcosa di più autorevole, Douglas Crockford dice che il tutore di apertura dovrebbe always be on the top line. Il suo ragionamento, se ricordo bene, è che lo rende coerente con il resto della lingua. Fondamentalmente, perché questo è valido, ma (probabilmente) il codice errato:

function myFunc() 
{ 
    return 
    { 
     ok: true 
    }; 
} 

... si dovrebbe evitare di mettere universalmente aperti parentesi su una nuova linea. Perché? Poiché lo stile di programmazione deve non portare a ambiguità sintattica.

Il codice di esempio di cui sopra è valido perché è completamente sintatticamente corretta e senza eccezioni sarà elevato se si scrive questo. Tuttavia, anziché restituire un oggetto letterale, {ok:true}, restituirà undefined e il codice sottostante non verrà raggiunto. Metti le parentesi di apertura su una riga e restituirà l'oggetto letterale che eri, forse, in attesa.

La domanda è: lo trovi abbastanza convincente?

+7

Non per nulla convincente. La mia convenzione di codifica: A. Usa qualsiasi stile di controvento che desideri. B. Qualsiasi costrutto che dipende da BRACE STYLE è FUBAR e dovrebbe essere evitato, come da convenzione. –

+0

Non ho idea di JS ma mi sembra che questo comportamento diventi meno illogico quando visualizzi che stai facendo le seguenti cose: 1) non restituisci alcun valore 2) crei un dizionario anonimo con il contenuto "ok = true ". Quindi non è un argomento contro l'OTBS perché provare a separare la dichiarazione di ritorno dal suo argomento è solo uno stile di codifica errato, indifferente a quale stile di parentesi si usa. – jsz

124

Douglas Crockford dà un motivo per la scelta del K & R stile :

uso sempre lo stile R K &, mettendo il { alla fine di una linea al posto del fronte, perché evita un orribile errore di progettazione nella dichiarazione return di JavaScript.

L'errore a cui fa riferimento è come gestisce la dichiarazione JavaScript return diverso nei due seguenti scenari:

return { 
    'status': 'ok' 
}; 

... e:

return 
{ 
    'status': 'ok' 
}; 

Il primo tornerà un oggetto con una proprietà status, mentre il secondo restituirà undefined a causa di semicolon insertion.


Douglas Crockford: JavaScript: The Good Parts: Style (page 96) - ISBN: 978-0596517748.

+8

Questo è solo un caso, in cui è possibile fare un'eccezione se si utilizzano le parentesi sulla nuova riga. – Tower

+19

@rFactor: Sì, è solo un caso e potresti fare un'eccezione per questo caso ... Ma vedo il punto nel rimanere coerente, e non fare eccezioni per la dichiarazione di ritorno. D'altra parte, mi piace lo stile K & R, quindi è tutto buono per me :) –

+6

Non è necessario fare eccezioni alle convenzioni di codifica. Basta impostare l'oggetto su una variabile temporanea e lasciare che restituisca la variabile temporanea. – Tower

0

I preferiscono il metodo R K & per gli stessi motivi sopra elencati. Sembra più compatto e le due linee rilevanti sono raggruppate.

Problemi correlati