jueves, 20 de enero de 2011

Raros Lenguajes Nuevos: CoffeeScript

CoffeeScript

CoffeeScript es un lenguaje que compila a JavaScript, y mantiene una premisa fundamental: sigue siendo JavaScript.

El código es compilado a su equivalente, y es posible utilizar cualquier librería o extensión como en el ambiente original. El código final generado es prolijo y entendible, pasa las validaciones de JavaScript Lint y funciona en cualquier motor de JavaScript.

Lo que CoffeeScript aporta es una sintaxis simplificada, inspirada en Ruby y Python, despojada de llaves y puntos y comas, bastante más legible pero con exactamente el mismo poder y características del JavaScript tradicional.

Veamos algunos ejemplos:

# Asignación:
number   = 42
opposite = true
# Condiciones:
number = -42 if opposite

Esto genera el siguiente JavaScript:

var number, opposite;
number = 42;
opposite = true;
if (opposite) {
number = -42;
}

Y aunque estos ejemplos suenan triviales, ya pueden notarse algunas abreviaturas importantes. Pero veamos un ejemplo más extremo, que utiliza declaración de funciones, espacios de nombre y comprensión de arrays:

# Declaración de funciones
square = (x) -> x * x

# Declaración de un array:
list = [1, 2, 3, 4, 5]

# Funciones dentro de un espacio de nombres:
math =
  root:   Math.sqrt
  square: square
  cube:   (x) -> x * square x

# Comprensión de Arrays: cubes = (math.cube num for num in list)

Y su equivalente en JavaScript:

var cubes, list, math, num, square;
var __slice = Array.prototype.slice;

square = function(x) {
  return x * x;
};

list = [1, 2, 3, 4, 5];

math = {
  root: Math.sqrt,
  square: square,
  cube: function(x) {
    return x * square(x);
  }
};

cubes = (function() {
  var _i, _len, _results;
  _results = [];
  for (_i = 0, _len = list.length; _i < _len; _i++) {
    num = list[_i];
    _results.push(math.cube(num));
  }
  return _results;
})();

¿No es notoriamente más clara la versión en CoffeeScript?

La sintaxis completa y referencia está disponible en línea.

¿Cómo funciona? El compilador está escrito en CoffeeScript (en la mejor tradición geek) utilizando Jison Parser Generator. La versión de línea de comando funciona sobre Node.js, aunque el compilador en si puede correr en cualquier motor de JavaScript.

Algo muy interesante es que cualquiera que quiera jugar un poco no necesita instalar nada. Simplemente puede ir al sitio de CoffeeScript dentro de GitHub y elegir “Try CoffeeScript” en el menú superior para acceder a un editor en línea que permite escribir código CoffeeScript del lado izquierdo y va mostrando cómo se compila (en tiempo real, letra por letra) en JavaScript, como se ve en la figura:

 

Try CoffeeScript

4 comentarios:

  1. M,

    Disculpe mi ignorancia pero pregunto: Es integrable dentro de una aplicación web escribiendo CoffeeScript? o antes hay que compilarlo y luego embeberlo? Como se podría integar en algun otro entorno?

    ResponderEliminar
  2. La misma pregunta, me quitaste las palabras de la boca gffuentes

    ResponderEliminar
  3. Hola,

    hay un ejemplo aquí:

    http://monocaffe.blogspot.com/2011/02/coffeescript-in-1-2-3.html

    Lo habría puesto aquí, pero no me deja meter codigo en un comentario.

    ResponderEliminar
  4. 1) Para desarrollo, puedes simplemente escribir tu código entre tags "type='tex/coffeescript'" (pero debes tener el archivo coffee-script.js en en el mismo directorio.

    De ese modo, no tienes que compilar nada, y tu código será automáticamente interpretado por el archivo incluído.

    2) Para producción, se recomienda instalar node.js (googlear por instrucciones) para que tus archivos coffee-script sean traducidos a javascript (se crearán copias en javascript con el mismo nombre pero con extensión .js).
    De ese modo, el código coffeescript se mantendrá como referencia, pero el código "válido" ejecutado por el browser será siempre el de javascript puro.

    3) Una forma rápida de ver como se traduce coffeescript a javascript en forma interactiva, es en el mismo sitio de coffeescript, en la página de pruebas, donde puedes tipear código en la consola online y ver la traducción a javascript automática en tiempo real (mientras tipeas). Es muy bueno.

    ResponderEliminar