2010-07-10 11 views
33

En el trabajo, colocamos llaves en la siguiente línea, pero en casa, hago lo contrario. ¿Cuál prefieres? (K & R vs OTBS)JavaScript llaves en línea nueva o no?

function something() { 
    // ... 
} 

function something() 
{ 
    // ... 
} 

Una gran cantidad de bibliotecas JavaScript parece utilizar las OTB (un cierto estilo corsé). Me gustaría seguirlos por coherencia entre otros proyectos de JavaScript, pero ¿no se ve más legible el estilo R de K &?

Nota: Sabemos que el problema con el retorno y llaves en JavaScript, que siempre será una excepción. Sin embargo, eso es solo un caso único.

+7

@Deleters: Antes de emitir su voto de eliminación, tenga en cuenta que la combinación de respuestas objetivamente agota las ventajas y desventajas de cualquiera de los estilos en el contexto de JavaScript, sin ser argumentativo ... Algunas respuestas dan una razón tangible para usar el estilo de K & R (debido al problema de inserción de punto y coma), y cite una fuente muy autorizada (Crockford). –

+4

De hecho, creo que esta pregunta tiene razones técnicas (ver la respuesta de @ Daniel) por no ser subjetivo y más bien ser extremadamente constructivo. –

+3

A pesar de que en esta lucha sin fin, los programadores de Python se ríen sus assses fuera: D –

Respuesta

28

¡Esta es una Guerra Santa a la que nunca obtendrás una respuesta utilizable! ¡Solo mantente con lo que todos los demás en el proyecto estén usando y no discutas!

Por lo que vale, soy un K & Rito. Encuentro que la OTBS pone mucho espacio visual entre una estructura de apertura y la siguiente declaración, cuando esas dos líneas a menudo están fuertemente relacionadas, por lo que se presentarían mejor juntas, sin una línea casi en blanco intermedia. Me gusta mantener mis líneas en blanco reservadas para separar bloques de declaraciones relacionadas.

En un estilo de codificación que en muchos espacios en blanco de todos modos, esto puede ser relativamente poco importante. Pero personalmente valoro la concisión, por lo que puedo mantener más del programa en pantalla.

No creo que tener un corsé abierto en una columna diferente al corsé sea un problema. Todavía es fácil ver la forma del bloque solo desde las sangrías. A menos que uses sangrías colgantes. No hagas eso. Pero esa es otra guerra santa por completo.

+1

¿Utiliza esta convención para otros idiomas también? Al igual que PHP? – Tower

+4

Personalmente, cuando yo soy el que decide, sí. Si no lo soy, porque soy parte de un proyecto más amplio, no voy a forzar lo que en general es una preferencia sin importancia para todos los demás. – bobince

+3

Para la mayoría de los idiomas estoy de acuerdo en que esta es una guerra santa sin sentido y que la consistencia debe ser el factor decisivo, pero creo que para Javascript la inserción automática de puntos y comas proporciona un argumento técnico real para llaves de apertura en línea. No estoy seguro de estar completamente de acuerdo con eso, pero es un argumento técnico más que religioso. – Keith

6

Ninguno es mejor que el otro. Simplemente elija uno y úselo de manera consistente.

+1

Estoy de acuerdo en que la consistencia es el factor más importante, pero el primero ahorra espacio horizontal y es por eso que ahora lo prefiero. – grm

+0

@grm: También prefiero el primer estilo, porque es más como las convenciones de nomenclatura de Java a las que estoy acostumbrado. Pero se puede argumentar que el segundo estilo da como resultado un código más legible. Sin embargo, al final, en mi humilde opinión, en comparación con factores más importantes relacionados con la escritura de código JavaScript correcto y mantenible, y también considerando el hecho de que la mayoría de los IDEs pueden formatear el código de cualquier manera con un clic (IntelliJ IDEA y WebStorm pueden hacerlo), este problema pierde su importancia. – Behrang

3

Los prefiero en la misma línea, pero sobre todo porque paso las funciones anónimas como argumentos mucho ... ahorra espacio y hace que la definición de la función parezca menos discordante. Por supuesto, esto es solo una opinión, y estoy de acuerdo con Bytecode Ninja en que la consistencia es lo más importante.

5

Todo subjetivo. Algunos son ligeramente mejores, pero la diferencia es insignificante. Lo más importante que debe hacer es mantenerse constante en todo su código.

Personalmente, prefiero el estilo escondido, con 4 fichas de espacio 'real'.

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

No a todos les gustan los espacios, utilizo pestañas. No revisaría todas las pestañas de conversión de código en espacios (incluso con la función de reemplazo). El código que escribes es código que debes enviar aquí. Give or take .. –

0

según se expresa en muchas respuestas, la mayoría importante que encontrar un estilo que usted (y/o sus compañeros de equipo, en su caso) se adhieren a. Personalmente prefiero la misma línea porque he descubierto que poner llaves en la nueva línea puede generar muchas líneas casi vacías si trabajas con cierres y funciones anidadas, lo que hace que el código sea menos legible para mí (aunque, probablemente no para la mayoría de la gente ...)

17

Sigo la convención de codificación de JavaScript de Douglas Crockford, que se inspiró en las pautas de estilo de Sun de Java.

Aquí hay un enlace a la misma: http://javascript.crockford.com/code.html

+0

Yo quería agregar el mismo enlace. Entonces +1 para ti: ¡eres más rápido! Además recomiendo siempre verificar su código de JavaScript con JSLint (ver http://www.jslint.com/). Por cierto, uno puede verificar que ambos estilos de colocación de llaves sean correctos. – Oleg

+1

gran punto, porque la colocación de la abrazadera realmente importa –

11

En mi opinión, depende de quién más va a trabajar con su código. Si trabajas en un equipo de C# y compartes muchas responsabilidades, ponlo en una nueva línea y evita las disputas inevitables que de otro modo seguirían. Si trabajas con una gran cantidad de PHP (o programadores JS antiguos), póngalo en la primera línea por el mismo motivo.

Pero si estás buscando algo más autoritario, Douglas Crockford dice que la abrazadera de apertura debe always be on the top line. Su razonamiento, si mal no recuerdo, es que lo hace coherente con el resto del lenguaje. Básicamente, porque esto es válido, pero (probablemente) un código incorrecto:

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

... se debe evitar poner universalmente-llaves abiertas en una nueva línea. ¿Por qué? Debido a que el estilo de programación debe no conducir a la ambigüedad sintáctica.

El código de ejemplo anterior es válida porque es completamente sintácticamente correcta y no hay excepciones será elevado si se escribe esto. Sin embargo, en lugar de devolver un objeto literal, {ok:true}, devolverá undefined y no se alcanzará el código que se encuentra debajo. Coloque los refuerzos de apertura en una línea y devolverá el objeto literal que usted estaba, tal vez, esperando.

La pregunta es, ¿te basta con que argumento convincente?

+7

No es convincente en absoluto. Mi convención de codificación: A. Usa el estilo de abrazadera que quieras. B. Cualquier construcción que dependa de BRACE STYLE es FUBAR y debe evitarse como convención. –

+0

No tengo ni idea sobre JS, pero me parece que este comportamiento se vuelve menos ilógico cuando visualiza que está haciendo lo siguiente: 1) no devuelve ningún valor 2) crea un diccionario anónimo con el contenido "ok = verdadero ". Por lo tanto, no es un argumento en contra de la OTBS porque tratar de separar la declaración de retorno de su argumento es simplemente un estilo de codificación incorrecto: indiferente qué estilo de refuerzo utilices. – jsz

124

Douglas Crockford da una razón para elegir el K & R estilo :

siempre uso el estilo R K &, poniendo el { al final de una línea en lugar de la parte delantera, ya que evita un error de diseño horrible en la declaración de JavaScript return.

El error se está refiriendo a es como JavaScript se encarga de la declaración return de manera diferente en los siguientes dos escenarios:

return { 
    'status': 'ok' 
}; 

... y:

return 
{ 
    'status': 'ok' 
}; 

El primero de ellos volverán un objeto con una propiedad status, mientras que el segundo volverá undefined debido semicolon insertion.


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

+8

Esto es solo un caso único, donde puede hacer una excepción si usa llaves en una línea nueva. – Tower

+19

@rFactor: Sí, es solo un caso y podría hacer una excepción para este caso ... Pero veo el punto de permanecer consistente y no hacer excepciones para la declaración de devolución. Por otro lado, me gusta el estilo K & R, así que todo es bueno para mí :) –

+6

No necesita hacer excepciones a las convenciones de codificación. Simplemente establece el objeto en una variable temporal y deja que devuelva la variable temporal. – Tower

0

Yo prefiero el método R K & por las mismas razones mencionadas anteriormente. Se ve más compacto, y las dos líneas relevantes se agrupan juntas.