Marcio Trindade

Coffee Script

Hoje eu dei uma olhada mais afundo na linguagem coffee Script. A linguagem é bem enxuta o que facilita a vida de quem precisa escrever muito código além de manter uma boa legibilidade para futuras manutenções mas é importante lembrar que coffee Script não é um Framework.

Eu não pretendo fazer deste artigo um mini-tutorial pra aprendizado, até por que já tem muita coisa no site oficial e o Fábio Akita já escreveu algo neste post o que pretendo abordar aqui são exemplos que não encontrei com muita facilidade.

Antes do código vamos a algumas considerações importantes:

  • assim como em Ruby todos os métodos retornam a ultima linha.
  • assim como em Ruby nas chamadas não é preciso utilizar parênteses se for o primeiro nível.
  • você pode utilizar coffee Script junto com seu Framework javascript predileto.
  • o código tem que ser compilado.

Agora vamos a alguns exemplos de código.

Utilizando outro framework (jQuery):

jquery.coffee
list_pages: ->
  html: ""
  for page in pages
    html += '<li>' + page.image + '</li>'
  $("#pages").html(html)

Quando compilado gera o arquivo abaixo:

jquery.js
var list_pages;
list_pages = function() {
  var *a, _b, *c, html, page;
  html = "";
  _b = pages;
  for (*a = 0, _c = _b.length; _a < _c; *a++) {
    page = *b[*a];
    html += '<li>' + page.image + '</li>';
  }
  return $("#pages").html(html);
};

Adicionar métodos dinamicamente em uma classe:

my_class.coffee
Page.image: (type) ->
  type ||= 'thumb'
  '/images/'+page.id+'/'+type+'.jpg'

Quando compilado gera o arquivo abaixo:

my_class.js
Page.image = function(type) {
  type = type || 'thumb';
  return '/images/' + page.id + '/' + type + '.jpg';
};

Adicionar métodos dinamicamente em um objeto:

math.coffee
Math.max_min: (value, max, min) ->
  this.max this.min(value, min), max

Quando compilado gera o arquivo abaixo:

math.js
Math.max_min = function(value, max, min) {
  return this.max(this.min(value, min), max);
};

Criar uma nova função:

alert.coffee
erro: ->
  alert "aconteceu um erro"

Quando compilado gera o arquivo abaixo:

alert.js
var erro;
erro = function() {
  return alert("aconteceu um erro");
};

Passar uma função como parametro:

callback.coffee
$(document).bind 'keyup', (e) ->
  eval(keys[e.keyCode])

Quando compilado gera o arquivo abaixo:

callback.js
$(document).bind('keyup', function(e) {
  return eval(keys[e.keyCode]);
});

Recomendo a quem ainda não conhece entrar no site oficial, instalar e começar a brincar, pois é uma ótima prática de aprendizagem além de facilitar a manutenção futura de seus projetos. Caso Você tenha alguma dúvida basta criar um comentário logo abaixo.