2012-08-22 25 views
15

Estoy tratando de decidir si vale la pena ir con el estilo de JavaScript sin punto y coma.JavaScript estilo y minificación de código sin punto y coma?

Si tengo código JavaScript sin punto y coma:

function(){ 
    var first = 1 
    var second = 2 
    sum = 1 + 2 
    return sum 
} 

que funcionará en el navegador y Node.js.

¿Pero el código minified (por Uglify o Closure Compiler) funciona en el navegador y en Node.js?

He leído el artículo Semicolons in JavaScript are optional. dice que debería funcionar.

+22

¿Cuál es la boca? ¿Su teclado tiene algo nítido en la tecla ';'? – Pointy

+0

Para mí, el código se ve más limpio – WHITECOLOR

+2

La minificación debe agregar puntos y comas donde sea necesario, solo para reemplazar los saltos de línea. – Bergi

Respuesta

21

Personalmente, soy un tipo de hombre a favor del punto y coma, pero hay un argumento convincente para la alternativa, que a menudo no es given a fair voice. Al igual que con todos los argumentos de estilo de codificación, este será un debate interminable sin una conclusión razonable. Haz lo que tú y tu equipo se sientan más cómodos.

Si elige un enfoque de punto y coma frugal, asegúrese de que usted y su equipo comprendan correctamente las reglas de terminación de declaraciones automatic semicolon insertion (ASI). Eso definitivamente es algo bueno para entender sea cual sea su decisión.

Con respecto a la minificación: si no quiere arriesgar el posible dolor de cabeza de un error de minificación y la carga asociada de informarlo y arreglarlo (o esperar una solución) porque no está haciendo ASI correctamente, entonces don confíe en ASI.

+1

Gracias. Definitivamente, tu información fue muy útil. – WHITECOLOR

3

No lo hagas. La inserción de dos puntos es algo muy peligroso. El aumento de tamaño no justifica el riesgo adicional.

Doulas Crockford no le va a gustar que si lo hace :) http://youtu.be/hQVTIJBZook

+2

He leído esto http://mislav.uniqpath.com/2010/05/semicolons/ – WHITECOLOR

+6

:-D Por lo que he escuchado, a Douglas Crockford nunca le gustará;) (Si no codifica exactamente como él) – Imp

+2

@WHITECOLOR: Si bien todo en ese artículo es cierto, aún así aconsejaría no hacerlo. Cada parte del código de ejemplo que lees tendrá punto y coma, así que ahí está. Y también los problemas relacionados con los puntos y comas insertados automáticamente pueden ser difíciles de depurar. –

-1

en mi humilde opinión, no hacen eso. Realmente no ganas tanto y el punto y coma es AFAIK colocado allí automáticamente, y puede colocarse en un lugar donde producirá errores extraños.

1

Los compiladores y minificadores son probablemente lo suficientemente inteligentes como para agregar el punto y coma si es necesario (y si ayuda al proceso de minificación).

¡Sin embargo! Un punto y coma le dice al intérprete que este es el final de una declaración. Si falta, tiene que mirar al comienzo de la siguiente línea para descubrir si tiene sentido que la declaración continúe. Luego decidirá si la siguiente línea es una nueva declaración (es decir, falta un punto y coma) o si de hecho es la continuación de la declaración de la línea anterior.

¡Sin punto y coma, está ralentizando las cosas! ¡Sin mencionar que esto podría introducir algunos errores oscuros cuando el intérprete, al ejecutar el algoritmo que describí, decide equivocarse!

+0

Parece que la única situación ambigua es cuando la próxima declaración se repite con el paréntesis "(" – WHITECOLOR

+0

@WHITECOLOR El intérprete todavía tiene que mirar la siguiente línea para decidirlo. Vale la pena intentarlo. , pero hacerlo para cada línea ralentizará las cosas. – Imp

4

A pesar de que coma en JavaScript son opcionales, no hay consejo fuerte contra el que no utilizan puntos y comas:

  • que hace que su código vulnerable para los insectos resultantes de la eliminación de espacios en blanco (usado en minificación): Prueba esto:

    var a = 1; var b = 7; suma var = a + b (a + b)

se le resta a var a=1,b=7,sum=a+b(a+b);, lo que resultará en el error number is not a function. También hay other cases y this case.

actualización: Este error no fue resultante de minimización, sin embargo, el siguiente es:

  • que hace que su código vulnerable a los errores resultantes de minimización: Probar:

    var isTrue = true 
    
    function doSomething() { return 'yeah' } 
    
    function doSomethingElse() { return 'yes, dear' } 
    
    doSomething() 
    
    !isTrue && doSomethingElse() 
    

    se minimiza a:

    var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse(); 
    

    que re sultados en:

    SyntaxError: Unexpected token ! 
    
  • Esto hace que su código sea menos legible y fácil de mantener en términos de conveniencia: El uso del punto y coma ha sido legítimamente establecida como una buena práctica, y un desarrollador de JavaScript entrenado será confundido por código tratando de evadir la convención .

Otra cosa es, usted tiene que preguntarse: ¿Qué es lo que realmente obtiene omitiendo el punto y coma?

  • Código de limpieza? Si desea que JavaScript no se vea como JavaScript, intente Coffee Script. Pero hay some misguided notions, que creen que las dificultades como la mencionada anteriormente se borran con «Solución fácil: cuando una línea comienza con paréntesis, anteponga un punto y coma». ¿Cómo es este código limpio, y cómo ayuda eso a cualquiera que lea tu código?

Conclusión: con la minificación, definitivamente trataría de usar las convenciones de JSLint. He visto a algunas personas finalmente deshilachando su código JavaScript después de horas tratando de arreglar un error que no sucedía en un código no minificado, sino en código minificado. No te metas en esta miseria; Los puntos y comas pueden ser feos a primera vista, pero mantienen los insectos fuera.

+0

Gracias, su opinión fue muy útil para mí. – WHITECOLOR

+2

'var a = 1; var b = 7; var sum = a + b (a + b)' ya no es válido , ¿cómo debería esto probar tu punto? –

+0

@FelixKling Cierto, me perdí allí. Lo corregí e incluí una discusión que probaba mi punto. –

Cuestiones relacionadas