CoffeeScript: Haciendo fácil JavaScript

Después de leer la liberación de Rails 3.1, me topé con que trae por defecto este sistema para facilitar la escritura de código JavaScript. Es curioso que lo traiga activo por defecto, ya que hay muchos a los que les gusta el lenguaje JavaScript y pueden haberse tomado mal esta decisión… no obstante yo lo veo bastante acertado, más que nada porque el código de CoffeeScript me resulta muy claro y limpio, en comparación con JavaScript y, lo mejor de todo, es que resulta incluso hasta más fácil de portar entre navegadores.

En principio, si consideramos algo tan simple como el famoso heredoc, que en JavaScript no está soportado, en CoffeeScript es posible de la siguiente forma:

datos = '''
     Estimado lector,
 
     esta es una carta....
     '''

O algo típico como:

potencia = (x, y) ->
    a = 1
    for i in [1..y]
        a *= x
    a
 
alert potencia(5, 2)

Pero no es un nuevo lenguaje que vayan a soportar los navegadores, realmente es una abstracción que finalmente se traduce a JavaScript (ya sea por parte del servidor o del cliente a través de las librerías de javascript correspondientes) y se usa en el navegador. Eso sí, el lenguaje es más completo, ya que incluye cosas que JavaScript no tiene por defecto, y más claro, ya que usa la sintaxis de palabra sobre símbolo (equivalente al use english de Perl).

En la página web oficial de CoffeeScript podemos encontrar un manual extenso y lleno de ejemplos del lenguaje, con su equivalencia en JavaScript. La mayoría de trozos se notan más claros y escuetos en CoffeeScript. No obstante, es lógico que una persona que esté más habituada a leer y escribir código en JavaScript, lo que le costará es ver el acercamiento que intenta realizar este lenguaje.

La sintaxis recuerda un poco a YAML, y por ende a Python, ya que requiere de una indentación para identificar de que pende cada instrucción. Así mismo, en su carencia de la palabra clave return, se parece también un poco Ruby. El uso de las funciones se ha asemejado a las lambda que integran ahora muchos lenguajes (Java se espera que lo tenga para su versión 8 ) y que emplea la flecha o símbolo de conclusión lógica (que es también usado para la definición de funciones en Erlang).

Como buen lenguaje de scripting no requiere que se declare ninguna variable, a diferencia de algunas implementaciones de JavaScript, donde es requerido, sobretodo para fijar el alcance de la misma, y hace uso de las post-condiciones, tal y como se puede ver en Perl y Ruby, en trozos como:

dato = 5 if valor > 5 and valor < 10

Es una de las mejoras que se integran en Ruby 3.1, por lo que, se puede probar en ese mismo entorno, o instalándolo directamente o a través del sistema de NodeJS. El sistema contiene un compilador o traductor que toma el código fuente y lo transforma en las librerías JavaScript necesarias para la página web, por lo que no penaliza el rendimiento de la propia página en sí.

Decir que, en mi parecer, el hecho de que sea un lenguaje que se compila a otro da la buena fe y esperanza de que el código generado sea estándar para todos los navegadores, así como la facilidad de que la implementación del mismo parte de un solo sitio, de una sola definición muy trabajada por el autor. Seguiremos de cerca su evolución.