Seja feliz e use CoffeeScript

Tempo de leitura:3 minuto(s)

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.

Autor: Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador.
Programa porque gosta, e começou a trabalhar com isso porque acha que trabalhar como administrador é meio chato. Por esse motivo sempre diz que nunca mais vai virar gerente de ninguém. E também porque acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é melhor que hierarquia. Mas isso é outro assunto.
Foi reconhecido  Microsoft MVP depois que alguém notou que ele não dormia a noite pra ficar escrevendo artigos, cuidando e participando do .Net Architects, gravando o podcast Tecnoretórica, escrevendo posts no blog e falando o que bem entende no twitter @giovannibassi. E por falar nisso é no twitter que conta pra todos que gerencia de projetos deve ser feita pelo time e não por um gerentes, que greves em TI são coisas sem sentido e que stored procedure com regras de negócio são malígnas.
Você já deve ter percebido (até porque está lá na primeira frase) que Giovanni é agilista. De tanto gostar disso ele trouxe os programas de certificação e treinamento  PSD e PSM da Scrum.org pro Brasil, e por causa deles, do MVP e de algum trabalho que aparece tem que ficar indo pros EUA de vez enquando, coisa que prefere não fazer. (É bem comum você ouvir ele perguntando porque a Scrum.org e a Microsoft não estão na Itália, por exemplo.)
Junto com alguns Jedis criou a Lambda3, que, apesar de ser pequena e de não ser muito comum no Brasil, insiste em fazer projetos e consultoria direito. Por causa da Lambda3 ele tem trabalhado mais do que quando era consultor independente, mas menos do que a maioria das pessoas. Quer dizer, isso se você considerar que os trabalhos junto à comunidade não são trabalho, caso contrário ele trabalha mais que a maioria das pessoas.
Recentemente ele resolveu que merecia viver melhor e ganhar uns anos de vida e desistiu de ser sedentário, fazendo algum barulho de vez em quando com os amigos no twitter com a hashtag #DotNetEmForma. Por causa do convite recente de amigos do lado Open Source (que ele respeita e admira), começou a escalar, e agora está sempre com as mãos machucadas. Mas ainda dá pra programar. Você encontra ele sempre em algum evento, como o TechEd, e o DNAD, mas também outros menos comuns para o pessoal do .NET, como a RubyConf. Nesses eventos, ou ele está vendo palestras, ou batendo papo com alguém, ou codando alguma aplicação que alguém achou que dava pra fazer durante o evento.

  • 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

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

  • Vai ter resposta! Aguarde!

  • 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.

    • 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. 🙂

  • 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’. 🙂

    • 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…

  • 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.

    • 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.

  • Ó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?

  • 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?

    • 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()