miércoles, 2 de mayo de 2012

Las comas primero, un buen estilo para JavaScript

Me gusta el estilo de comas primero en JavaScript. Principalmente por estos dos motivos:
  1. Reduce la complejidad visual del código, por quedar las partes de cada sentencia más estructuradas visualmente. Por tanto, también:
  2. Ayuda a encontrar errores.
Creo que el siguiente ejemplo es bastante ilustrativo:



Aviso: Limitaciones de este estilo

Existe un pequeño problema de este estilo, y te afectará si utilizas el REPL de node.js.

El REPL de node.js lee de línea en línea. Cuando lee una nueva línea intenta  ejecutar el código de la siguiente forma:
  1. Primero intenta ejecutar el código como si fuera una expresión. 
  2. Si eso falla, intenta ejecutar el código como una sentencia.
  3. Si eso también falla, entonces asume que necesita más input.
Veamos estos dos ejemplos

Al ejecutarlos, pasa lo siguiente:
$ node
> var a = 1
undefined
> ,b = 2
... ,c = 3;
...
> var a = 1,
... b = 2,
... c = 3;
undefined
>

En el primer caso, el REPL sigue pidiendo de manera indefinida y hay que hacer un Ctrl-C para salir. El segundo caso funciona correctamente.

Lo que pasa en el primer caso es lo siguiente. Una vez que el REPL lee la primera linea, intenta ejecutarla como una expresión y falla. A continuación, intenta ejecutarla como una sentencia y funciona. Una vez que se ha usado la primera linea, se intenta ejectuar la segunda linea como una expresión y falla. La intenta ejecutar como una sentencia y también falla. Falla porque la coma al principio de la línea da un error de sintaxis. Por lo tanto, pide más entradas. El proceso se repite con la siguiente línea y pasa lo mismo. Lo seguirá intentando de forma recurrente porque no hay manera de añadir algo al final que transforme el contenido que hay desde la segunda línea en adelante en una expresión o sentencia válida.

Sin embargo,habitualmente, el estilo con coma primero no será un problema con node.js por que se usará en ficheros se leen de golpe. 

2 comentarios:

  1. No me gusta mucho ese estilo; Si es solo para detectar errores no hay como usar un compilador como Google Closure Compiler integrado con tu editor, aqui un par de ejemplos de como integrarlo con Sublime Text y Notepad++ https://gist.github.com/1508450 https://gist.github.com/1846374

    ResponderEliminar
  2. Te recomiendo que pruebes este estilo durante una temporada y veas si te aporta o no. Además de lo sencillo del escaneo visual ya comentado, hay tareas que podrás realizar con menos problemas, como mover las definiciones de propiedades entre objetos de JavaScript más cómodamente. Además, sobre lo que comentas de la detección de errores con Google Closure (o JSLint, JSHint, o cualquier otro) no es incompatible con este estilo sino todo lo contrario, complementario. Una cosa es la anticipación con el estilo de código y otra la detección que puedan hacer estas herramientas en los IDEs y/o en los procesos de integración continua. Creo que lo ideal es sacar lo mejor de los dos temas.

    ResponderEliminar