É claro que um grande profissional é a quantidade de açúcar sintático que leva ao código mais curto em muitos casos. Em http://jashkenas.github.com/coffee-script/, existem exemplos impressionantes. Por outro lado, tenho dúvidas de que esses exemplos representem códigos de aplicações complexas do mundo real. No meu código, por exemplo, nunca adiciono funções a objetos nus, mas a seus protótipos. Além disso, o recurso de protótipo está oculto do usuário, sugerindo OOP clássico em vez de Javascript idiomático.
O exemplo de compreensão da matriz ficaria no meu código provavelmente assim:
cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...
javascript
coffeescript
Philip
fonte
fonte
Respostas:
Sou o autor de um próximo livro sobre o CoffeeScript:
http://pragprog.com/titles/tbcoffee/coffeescript
Eu estava convencido de que valia a pena usar o CoffeeScript após cerca de uma semana brincando com ele, mesmo que a linguagem tivesse apenas alguns meses na época e tivesse muito mais arestas do que agora. O site oficial faz um ótimo trabalho ao listar (a maioria) os recursos do idioma, por isso não os repetirei aqui. Em vez disso, vou apenas dizer que os profissionais da linguagem são:
O número 3 recebe muito mais atenção do que os dois primeiros (mesmo no meu livro), mas quanto mais penso nisso, mais percebo que não dei o salto apenas pela bonita sintaxe; Fiz o salto porque a linguagem me levou a um JavaScript melhor e menos propenso a erros. Para dar alguns exemplos rápidos:
var
, sombreando uma variável com o mesmo nome (exceto com argumentos nomeados) ou possuindo variáveis em arquivos diferentes que interagem (consulte https://stackoverflow.com/questions / 5211638 / pattern-for-coffeescript-modules / 5212449 ).->
é muito mais fácil escrever do quefunction(){}
, é mais fácil usar retornos de chamada. O recuo semântico deixa claro quando os retornos de chamada são aninhados. E=>
facilita a preservaçãothis
quando apropriado.unless x
é mais fácil para os falantes de inglês analisarif (!x)
, eif x?
é mais fácil do queif (x != null)
, dar apenas dois exemplos, você pode gastar menos ciclos cerebrais na sintaxe da lógica e mais na própria lógica.Uma ótima biblioteca como o Underscore.js pode cuidar de alguns desses problemas, mas não de todos.
Agora, os contras:
Obviamente, acho que os profissionais superam os contras para mim pessoalmente, mas esse não será o caso de todas as pessoas, equipes ou projetos. (Até Jeremy Ashkenas escreve muito JavaScript.) O CoffeeScript é melhor visualizado como um excelente complemento para JavaScript, não como um substituto.
fonte
=>
a documentação? Isso é demais . (Os outros pontos foram também - muito boa resposta imparcial com uma lista honesta de cons :).Foo.prototype.bar = ...
linhas por toda parte, o que é loucura!). É uma ótima maneira de organizar o código de maneira limpa. Por outro lado, pode fazer com que as pessoas usem OOP, mesmo quando uma abordagem funcional é muito mais elegante.Temos uma grande base de código JavaScript e, cerca de um mês atrás, decidimos experimentar o CoffeeScript. Um de nossos desenvolvedores começou a migrar um de nossos módulos de JS para CS usando http://js2coffee.org/ . Essa ferramenta foi bastante útil e demorou cerca de duas ou três horas para portar uma linha de algo mais do que 1000. Algumas observações que observamos naquele momento:
O código CoffeeScript resultante era bastante legível.
Nós o compilamos de volta ao JavaScript e foi muito fácil navegar e depurar. Enquanto estávamos portando esse módulo, outro desenvolvedor da nossa equipe encontrou um bug nele. Esses dois desenvolvedores corrigiram esse bug em nosso antigo código JavaScript e no novo código JavaScript que saiu do compilador CS. Eles trabalharam independentemente e levaram a mesma quantidade de tempo (15 a 20 minutos).
Devido ao fato de ser uma porta, o código resultante não estava usando recursos específicos do café que eram apropriados ou desejáveis. Se escrevermos no CoffeeScript do zero, o código seria mais idiomático. Por causa disso, decidimos que não portaríamos o código existente.
Em geral, a legibilidade de funções mais curtas e objetos menores aumentou até certo ponto. No entanto, para métodos mais longos, esse não era o caso. As maiores economias surgiram
->
e foram explícitasreturn
, mas, além disso, nosso código não havia sido significativamente mais curto ou mais simples. Algumas partes da sintaxe pareciam bastante confusas, especialmente literais de objetos. O CS omite chaves entre definições de membros e combinado com "tudo é uma expressão" e implícito, oreturn
que dificultava a leitura de alguns bits de código.Aqui está o JavaScript:
E aqui está a aparência do código CoffeeScript correspondente:
Agora, é muito difícil descobrir que a declaração de retorno começa na
(*)
linha. Em nosso projeto, dependemos muito de literais de objetos: passamos como parâmetros de função e os retornamos de outras funções. Em muitos casos, esses objetos tendem a ser bastante complexos: com membros de diferentes tipos e vários níveis de aninhamento. No nosso caso, a sensação geral era de que o código CoffeeScript era realmente mais difícil de ler do que o código JavaScript comum.Embora a depuração do CoffeeScript tenha sido mais fácil do que esperávamos, a experiência de edição diminuiu bastante. Não foi possível encontrar um bom editor / IDE para este idioma. Não padronizamos no editor / IDE o código do lado do cliente para o nosso projeto e, de fato, todos usamos ferramentas diferentes. De fato, todos os membros de uma equipe concordam que, quando mudam para o CoffeeScript, recebem um suporte bastante ruim de sua ferramenta. Os plug-ins de editor e IDE estão em uma forma muito precoce e, em alguns casos, eles nem sequer podem nos dar um suporte apropriado para realçar ou recuar na sintaxe. Não estamos falando de trechos de código ou refatoração. Usamos WebStorm, Eclipse, NetBeans, VisualStudio, Notepad ++ e SublimeText2.
Falando em ferramentas, devo mencionar que o próprio compilador CoffeScript vem como um pacote Node JS. Como somos uma loja Java / .NET principal, todos estão desenvolvendo caixas do Windows. Até recentemente, o suporte do Windows era quase inexistente no Node. Não conseguimos fazer com que o compilador CoffeeScript fosse executado no Windows; por enquanto, decidimos manter as
<script type="text/coffeescript">
tags e o compilador em tempo real baseado no navegador.O compilador é bastante rápido e não aumenta muito o tempo de inicialização. A desvantagem é que o JavaScript resultante é
eval
editado e é um pouco difícil colocar pontos de interrupção nas ferramentas de desenvolvedor de navegadores (especialmente no IE8). Se tivermos dificuldade com a depuração, pré-compilamos o código CoffeeScript com a mesma ferramenta de migração listada acima, mas isso ainda não é muito conveniente.Outras promessas do CoffeeScript, como
var
inserção automática ou gerenciamento semitransparente dothis
operador de seta gorda (=>
), não deram tanto ganho quanto esperávamos. Já usamos JSLint como parte do nosso processo de construção e escrevemos código noES3 x ES5-Strict
subconjunto da linguagem. De qualquer forma, o fato de o Coffee produzir o mesmo tipo de código "limpo" é uma coisa boa . Desejo que todas as estruturas do lado do servidor também produzam marcações HTML5 e CSS3 válidas!Dito isto, eu não diria que o CoffeeScript economiza muito tempo colocando
var
palavras-chave para mim. Osvar
s ausentes são facilmente capturados pelo JSLint e são facilmente corrigíveis. Além disso, depois de corrigido por algum tempo, você começa a escrever um bom JavaScript automaticamente de qualquer maneira. Assim, eu não diria que o café é realmente que útil a este respeito.Avaliamos o CoffeeScript por cerca de uma semana. Todos os membros da equipe estavam escrevendo um código e compartilhamos nossas experiências. Escrevemos um novo código com ele e portamos um código existente quando acharmos melhor. Nossos sentimentos sobre o idioma foram confusos.
Em geral, eu diria que isso não acelerou nosso desenvolvimento, mas também não nos atrasou. Alguns ganhos de velocidade devido à menor digitação e menos superfície de erro foram compensados por desacelerações em outras áreas, principalmente no suporte a ferramentas. Depois de uma semana , decidimos que não exigiríamos o uso do CoffeeScript, mas também não o proibiríamos . Dada a livre escolha, na prática ninguém a usa, pelo menos por enquanto. De tempos em tempos, penso em criar um novo recurso para a criação de protótipos e depois converter o código em JavaScript antes de integrar-se ao restante do projeto para obter um início mais rápido, mas ainda não tentei essa abordagem.
fonte
Prós
veja a resposta de Trevor Burnham .
além disso, você pode pensar em si mesmo como um cara descolado, que está fazendo coisas da moda, em vez de mexer com a sujeira do javascript.
Contras
O CoffeeScript nada mais é do que açúcar sintático e óculos cor de rosa.
Para coisas fáceis - o CoffeeScript é redundante, porque fazer coisas fáceis é fácil em qualquer idioma. E o jQuery é provavelmente ainda mais simples que o CoffeeScript.
Para coisas difíceis - você deve entender seu meio. E seu meio é HTML, DOM e CSS; o Javascript é apenas uma ferramenta para interconectá-los - todas as APIs são escritas especificamente para Javascript. O uso de outra linguagem, que seria compilada para uma versão "real" - é bastante arriscado, seja Java (GWT), Dart ou CoffeeScript.
Os antipadrões ou a ignorância banal das regras de linguagem podem ser corrigidos lendo um ou dois bons livros. E tenho certeza de que o Coffeescript tem seus próprios antipadrões.
O suporte ao IDE para Coffeescript é ainda pior que para JS.
fonte
O maior profissional, em minha mente, é:
Coffescript simples compila no javascript que você deveria ter escrito, mas não o fez, porque não era direto.
Existem alguns cantos desagradáveis de javascript que são evitados apenas com vigilância - exemplos em cima da minha cabeça:
Se você escrever um coffeescript, todos eles serão tratados automaticamente .
Os contras são, na OMI, principalmente pequenos:
fonte
profissionais
O exemplo de trabalho de Andrew I acima foi esclarecedor. Acredito que a legibilidade de seus retornos literais de objetos existentes seria aprimorada simplesmente identificando manualmente o retorno
Retorna
// literal do objeto aqui
As ferramentas IDE foram aprimoradas, o TextMate e o Cloud9 oferecem suporte ao CoffeeScript. É certo que o suporte do Windows está atrasado (isso não é verdade para o desenvolvimento da web em geral?)
contras
O CoffeeScript interpretado pelo navegador pode ser um desafio para depurar.
É uma camada adicional sobre JavaScript que requer alguma compreensão e consideração dos desenvolvedores.
fonte
profissionais
contras
fonte