No más JavaScript!

Bienvenido CoffeScript

Hace poco tuvo lugar OSCON y uno de los eventos más populares fue el Emerging Languages Camp donde muchas personas muy inteligentes dieron distintas presentaciones sobre nuevos lenguajes de programación, buenas practicas, patrones, etc. Por lo que después de ver las distintas presentaciones obvias como la de PyPy y Clojure me llamo la atención CoffeScript.

CoffeScript permite, utilizando una sintaxis muy parecida a la de Python, generar código JavaScript. Por ejemplo, una de las cosas que odio a muerte de JavaScript es su supuesto soporte de objetos. Veamos como se hace con CoffeScript:



class Animal
  constructor: (@name) ->

  move: (meters) ->
    alert @name + " moved " + meters + " meters"

class Person extends Animal
  move: (meters) ->
    super(meters)

  walk: (steps) ->
    this.move(0.6 * steps)

me = new Person "Ale"
me.walk(10)

El código JavaScript generado es el siguiente:



var Animal, Person, me;
var __extends = function(child, parent) {
    var ctor = function(){};
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
    child.prototype.constructor = child;
    if (typeof parent.extended === "function") parent.extended(child);
    child.__superClass__ = parent.prototype;
  };
Animal = function(_a) {
  this.name = _a;
  return this;
};
Animal.prototype.move = function(meters) {
  return alert(this.name + " moved " + meters + " meters");
};
Person = function() {
  return Animal.apply(this, arguments);
};
__extends(Person, Animal);
Person.prototype.move = function(meters) {
  return Person.__superClass__.move.call(this, meters);
};
Person.prototype.walk = function(steps) {
  return this.move(0.6 * steps);
};
me = new Person("Alex");
me.walk(10);

Ugh!