Muito buzz se formou depois que o DHH tornou público que a versão 3.1 do Rails virá com CofeeScript por padrão.
Aproveitando a barulheira, que é comum a cada vez que o criador da plataforma abre a boca, vamos nos ater ao que é importante e apresentar uma introdução ao resumo simplificado do CoffeeScript básico.
Confesso que minha opinião sobre essa ferramenta mudou nos primeiros instantes em que comecei a usar. No site do CoffeeScript (ok se eu começar a chamar de CS daqui para frente?) existe um link onde você digita o código do lado esquerdo e, imediatamente, do lado direito aparece o equivalente em JavaScript.
Fiz uma brincadeira lá usando um código que sempre me vem à cabeça ao tentar explicar o básico de programação funcional para alguem. Segue:
mimimi = (operation, value) -> operation(value); dobro = (value) -> value + value; quadrado = (value) -> value * value; zero = (value) -> value - value; um = (value) -> value / value; alert(mimimi(dobro, 3)); alert(mimimi(quadrado, 3)); alert(mimimi(zero, 3)); alert(mimimi(um, 3));
Nada de outro mundo, certo? O equivalente JS é o código abaixo:
var dobro, mimimi, quadrado, um, zero;
mimimi = function(operation, value) {
return operation(value);
};
dobro = function(value) {
return value + value;
};
quadrado = function(value) {
return value * value;
};
zero = function(value) {
return value - value;
};
um = function(value) {
return value / value;
};
alert(mimimi(dobro, 3));
alert(mimimi(quadrado, 3));
alert(mimimi(zero, 3));
alert(mimimi(um, 3));
CS permite também a checagem automática de valores e parâmetros opcionais, conforme o exemplo retirado do site:
fill = (container, liquid = "coffee") ->
"Filling the #{container} with #{liquid}..."
Ou o equivalente em JS:
var fill;
fill = function(container, liquid) {
if (liquid == null) {
liquid = "coffee";
}
return "Filling the " + container + " with " + liquid + "...";
};
Sem dúvida, muito mais legível e expressivo.
É uma ferramenta que eu pretendo usar em algum projeto pequeno, para testar e ver o quanto acelera meu trabalho. Em projetos maiores talvez eu demore um pouco mais para usar mas, considerando que umas das minhas aplicações já conta com 79% de código total escrito em JavaScript, segundo o GitHub, imagino que isso vai melhorar consideravelmente a manutenção do código.
E no mais, se o CS não te chamou a atenção e você não quer mesmo utilizar, basta remover o require do arquivo Gemfiles e a vida segue como se nada tivesse acontecido.
Links recomendados:
- Site do CoffeScript: http://jashkenas.github.com/coffee-script/
- Mais do mesmo: http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jquery-sass-and-controversy-4669.html
- Exemplo bacana de como utilizar CS dentro da sua view: http://geekiriki.blogspot.com/2010/08/jquery-meets-coffeescript.html
Aê Plínio! O flame está correndo solto … pra quem gosta de acompanhar segue o link: https://github.com/rails/rails/commit/9f09aeb8273177fc2d09ebdafcc76ee8eb56fe33#comments
Eu nao acho que o exemplo ficou tao melhor assim nao. Uma camada de acucar pra ganhar isso parece um pouco demais…
Muito e tal.. gostei da sintax mas e ai?!!
1 – CofeeScript se usa com Rubi ou o que?
2 – Quais outras vantagens alem de um código limpo que ja é um bom ganho?
Valew….
@Rodrigo: É exatamente por isso que eu não uso SASS/Less. O overhead acaba sendo maior do que o ganho. De fato você ganha alguma coisa em legibilidade, mas em exemplos com jQuery a sintaxe continua praticamente a mesma.
@Alexsandro: Você pode usar com Ruby/Rails através da gem coffee-script. Além do código teoricamente mais limpo, você ganha conhecimento numa ferramenta que talvez não vá usar.
Como eu disse, ainda preciso utilizar num projeto onde eu sinta a diferença, como aconteceu com o HAML, para poder dizer com toda as letras “é ótimo, pode usar” ou “não vale a pena, é só buzz.”