Seja feliz e use CoffeeScript

coffeescriptJá faz um tempo que eu queria vir aqui contar pra vocês que o Javascript já era. Morreu. Afundou. Não serve mais.

Quando ele morreu?, você deve estar se perguntando. Ele morreu quando foi transformado na linguagem de assembly da web, e isso aconteceu logo depois que o CoffeeScript foi inventado (cerca de 2 anos atrás) e começou a aparecer ferramental que o suportasse.

Olha o que diz Erik Meijer, segundo o Scott Hanselman num post recente:

JavaScript is an assembly language. The JavaScript + HTML generate is like a .NET assembly. The browser can execute it, but no human should really care what’s there.

ou

JavaScript é uma linguagem de assembly (ou montagem). O JavaScript + HTML gerado é como um assembly .NET. O navegador pode executá-lo, mas nenhum ser humano realmente deveria se preocupar com o que está lá.

Imagino o Victor Cavalcante se revirando ao ler isso. O chapéu até cai.

E o que é o Coffee Script? É uma linguagem plenamente compatível com Javascript (no sentido em que tudo o que o Javascript faz, ela também suporta), mas muito mais poderosa. Como ela é plenamente compatível, o resultado da sua compilação é… Javascript!

Sim, meus amigos, CoffeeScript gera Javascript. Assim, você pode escrever código com CoffeeScript, e rodar um comando no terminal/linha de comando e ver javascript gerado. Melhor que isso, pode deixar um processo olhando para seus arquivos .coffee, que sempre que salvos são compilados para .js.

E o resultado é lindo. Uma linguagem com forte influência funcional e algumas belezas que faltam forte no Javascript. Interpolação de strings, lambdas, closures, sem ponto-e-virgula, foreach (quem diria, js não tem foreach!), entre outras. E tem uma muito importante: classes! Vocês podem escrever classes com CoffeeScript, sem aqueles prototypes chatos.

Isso já seria muito bom, mas dá trabalho para os usuários do Windows, já que a principal implementação dele é feita com NodeJS, que até recentemente não rodava nativamente no Windows (e agora roda, mas CoffeeScript continua não rodando, principalmente porque algumas bibliotecas no NodeJS ainda não foram portadas). Já era possível fazer via CygWin, mas ficava meio feio. Falta ainda suporte ferramental.

Mas isso não é mais um problema para o desenvolvedor que programa com .NET. A Mindscape fez um addin para Visual Studio que permite que você trabalhe nativamente com CoffeeScript (e também com Less e SaSS). E tudo fica muito fácil de trabalhar, já que ele faz syntax highlighting e gera o arquivo .js. Fica bonito.

Ferramental para CoffeeScript no Visual Studio

Saiba mais sobre o addin aqui.

.

.

.

Acalmem-se, o Javascript não morreu. Mas para coisas mais complexas, use CoffeeScript. E seja feliz.

  • Anônimo

    Ótimo post, já tinha lido sobre CoffeeScript no blog do Akita, mas com esse addin pra VS aí não conhecia.

    PS: JavaScript tem foreach sim! -> http://www.w3schools.com/js/js_loop_for_in.asp

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Na verdade não, ele não itera os objetos de uma coleção, mas as propriedades do objeto.

  • http://twitter.com/vcavalcante Victor Cavalcante

    Vai ter resposta! Aguarde!

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Opa, quero muito ver! o/

  • Hugo

    Giovanni,
    Trabalho com javascript no servidor, e gosto muito.
    Acredito que o scott se referiu a javascript gerado. É claro que se você for ler quem está gerando o javascript no browser será mais fácil.
    Por último, adoro prototype.

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Eu gosto de Javascript também, só que algumas coisas na linguagem irritam. E eu não gosto de prototypes, prefiro classes.
      E na boa, não tem foreach????

      • Hugo

        Hehehe.. tenta ver as coisas por outro lado com o for in (foreach), Pode até ser implementado um método ForEach tranquilo, mas gosto de ter acesso aos membros do objeto. Reflection power 

  • Diogo Damiani Ferreira

    Legal Giggio! 

    Há um mês mais ou menos estive dando uma olhada mais atenta à CoffeeScript, depois de uns tweets que vi. Achei bacana e estou tentado separar um tempo para brincar com ela (e com JS também).

    Não sabia do plugin. Com certeza vai ser útil para mim, já que tenho o meu ambiente .NET todo pronto!

  • Guilherme Rey

    Gostei. Realmente CoffeeScript traz uma sintaxe mais limpa e intuitiva, e consequentemente poderosa. Só um ps: Javascript tem closures. :-)

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Sim, mas não fica tão bonito! :)

  • Anônimo

    A idéia de esconder o JavaScript não é de hoje. O Google Web Toolkit (GWT) se propõe a fazer isso (escreve-se aplicações em Java que são “convertidas” para JavaScript). A própria Microsoft tem o Script# (que nunca foi lançado oficialmente) e que “converte” C# para JavaScript. Ambos existem desde 2006 e parecem que não “pegaram” (pelo menos eu não estou acostumado a ouvir falar muito deles). Se extrapolarmos um pouco, o próprio ASP.NET WebForms também fazia isso, se bem que tentava esconder muito mais que somente JavaScript. Mas o princípio por trás era o mesmo: permitir o desenvolvimento de aplicações sem que o desenvolvedor necessite saber o que de fato ocorre realmente por trás. Isso tem prós e contras. Vamos cair na mesma discussão sobre o uso ou não de WebForms, provavelmente com os mesmos argumentos. Minha opinião, baseada no que vejo por aí e na minha experiência, é que ainda estamos longe de ignorar totalmente o JavaScript e HTML. A pessoa pode até fingir que não existe, mas em um determinado momento, quando quiser fazer algo mais sofisticado, vai esbarrar em alguns limites se não “sujar as mãos’. :)

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Sim, imagino que isso vai mesmo acontecer. Mas se posso ser mais produtivo, com um código mais bonito… porque faria de outra forma?
      Nos cenários onde só JS couber, usamos ele!

  • Rodrigo

    Uma dúvida em relação ao Less; para eu gerar os .css eu preciso de uma “gambiarra”?

    CofeeScript e Sass a extensão gera automaticamente o arquivos “alvo”, mas como trabalhar com o Less?

    Alguém tem um link, exemplo e tal…

  • http://leobalter.net Leo Balter

    Não me vejo usando CoffeScript, sou purista, não vejo o CoffeScript me entregando um aumento de velocidade de desenvolvimento suficiente para estudar sua sintaxe e deixar de ver o que é finalmente o código a ser interpretado pelo browser.

    Além disso, Javascript é bom quando é bem escrito, escrever mal não é impossível também em CoffeScript.

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Entendo, é normal a gente continuar com o que conhece. Não acho que JS é ruim, pelo contrário, também gosto. Só acho o CS melhor.

  • http://twitter.com/robsondealmeida Robson de Almeida

    Ótimo post .. Parabéns! 

    Mas Javascript possui Closures sim … (https://developer.mozilla.org/en/JavaScript/Guide/Closures).

    Ainda assim, estou pilhado para colocar as mãos no CoffeeScript :) .

  • Rogerthat

    Funciona em todos os browsers?

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Sim!

  • Pingback: Material da Palestra de CoffeeScript no DevDay 2011 | Blog Lambda3()

  • Commonbullet

    Linguagem esquisita que quando compilada vira… Javascript! Bah hahahahahahaha!

  • Danielvarjao

    Desculpe ressuscitar a thread, mas só li agora por conta da citação no outro post.
    Já melhorou a questão do funcionamento em Windows?

    • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

      Sim, as versões atuais já estão bem melhores. O NPM (que instala o CS) está vindo nativo, o que facilita muito.

  • Pingback: Testando CoffeeScript com Visual Studio, Resharper, QUnit e Web Workbench | Blog Lambda3()