Há alguns dias, um colega de trabalho me perguntou se realmente valia a pena aprender CoffeeScript, pois à primeira vista ele não percebeu muitas diferenças em relação ao JavaScript. Esta foi a minha resposta ‘espontânea’ por e-mail e acho que o convenci 🙂
-Com CoffeeScript você escreverá um código mais compacto e legível, com menos sinais de pontuação e mais palavras simples em inglês. Por exemplo, você se verá usando ‘e’ em vez de && ou ‘a menos que a condição’ em vez de ‘se (! Condição) {}’.
-Você pode usar o operador # dentro de strings para compor strings geradas dinamicamente. Isso é muito mais legível do que uma mistura aleatória de sinais de adição, código e aspas e, se você construir algum HTML dinamicamente, verá como é útil:
"<a href='#{calculate_url()}'>Click here</a>"
instead of
"<a href='" + calculate_url() + "'>Click here</a>"
-CoffeeScript é uma linguagem real orientada a objetos. Embora você possa emular OO com JavaScript usando construtores ou a propriedade prototype, CoffeeScript tem sua própria sintaxe específica para definir classes, métodos, construtores ou variáveis de instância. O Real OO facilita a construção de uma boa arquitetura e a organização do código.
-O operador =>. Adoro este, pois permite definir uma função que será executada no escopo atual sem usar explicitamente um encerramento. Por exemplo:
//JavaScript
var Thing = function(){
this.importantData = 42;
this.doSomething = function(){
var closureVar = this; //We save a reference to this object
window.setTimer(1000, function(){
//This method will be executed from window scope as it's triggered by setTimer
//We use the previous saved reference to access the correct value
alert("Response to life, universe and everything is: " + closureVar.importantData);
}
}
}
# CoffeeScript
class Thing
constructor: ->
@importantData = 42
hacerAlgo: ->
window.setTimer 1000, => # This operator makes the closure for us implicitly, that's great!
alert "Response to life, universe and everything is: #{@importantData}"
– No CoffeeScript você pode facilmente iterar sobre os elementos da matriz
//JavaScript
var whatever = [4,3,2,1];
var doubles = []
for (var i = 0; i<whatever.length;i++) {
doubles.push(whatever[i]*2);
}
# CoffeeScript
whatever = [4,3,2,1]
doubles = []
doubles.push(number*2) for number in whatever
-A capacidade de escrever condições após o código também o torna mais legível:
doSomething() if emergency
doSomething() unless nothingHappens # Even on iterators to filter some of original array items
phones = ['iPhone', 'Nokia 3230', 'Samsung Galaxy III']
alert "#{phone} is awesome" for phone in phones when phone isnt 'Samsung Galaxy III'
A maioria das melhorias do CoffeeScript torna seu código mais legível, e um código mais legível é mais fácil e barato de manter o código. Isso é especialmente útil quando você trabalha em um projeto JavaScript não trivial ou precisa compartilhar código com outras pessoas ou consigo mesmo em alguns meses.
Essas são apenas algumas das vantagens desta linguagem incrível, então basta ir ao site do CoffeeScript e dar uma chance:
http://coffeescript.org