CoffeeScript - CoffeeScript
Paradigma | Multi-paradigma : baseado em protótipo , funcional , imperativo , script |
---|---|
Projetado por | Jeremy Ashkenas |
Desenvolvedor | Jeremy Ashkenas |
Apareceu pela primeira vez | 13 de dezembro de 2009 |
Versão estável | |
Disciplina de digitação | dinâmico , implícito |
SO | Plataforma cruzada |
Licença | Licença MIT |
Extensões de nome de arquivo | .café, .litcoffee |
Local na rede Internet | coffeescript |
Influenciado por | |
Haskell , JavaScript , Perl , Python , Ruby , YAML | |
Influenciado | |
MoonScript, LiveScript , JavaScript |
CoffeeScript é uma linguagem de programação que compila em JavaScript . Ele adiciona açúcar sintático inspirado em Ruby , Python e Haskell em um esforço para melhorar a brevidade e legibilidade do JavaScript. Recursos adicionais específicos incluem compreensão de lista e atribuição de desestruturação .
O suporte para CoffeeScript está incluído no Ruby on Rails versão 3.1 e no Play Framework . Em 2011, Brendan Eich fez referência ao CoffeeScript como uma influência em seus pensamentos sobre o futuro do JavaScript.
História
Em 13 de dezembro de 2009, Jeremy Ashkenas fez o primeiro commit do Git do CoffeeScript com o comentário: "commit inicial da linguagem de mistério." O compilador foi escrito em Ruby. Em 24 de dezembro, ele fez o primeiro lançamento marcado e documentado, 0.1.0. Em 21 de fevereiro de 2010, ele comprometeu a versão 0.5, que substituiu o compilador Ruby por uma versão de auto-hospedagem em CoffeeScript puro. Naquela época, o projeto havia atraído vários outros colaboradores no GitHub e estava recebendo mais de 300 visitas de página por dia.
Em 24 de dezembro de 2010, Ashkenas anunciou o lançamento do estável 1.0.0 para Hacker News , o site onde o projeto foi anunciado pela primeira vez.
Em 18 de setembro de 2017, a versão 2.0.0 foi introduzida, que "visa trazer o CoffeeScript para a era JavaScript moderna, fechando as lacunas de compatibilidade com o JavaScript enquanto preserva a sintaxe limpa que é a marca registrada do CoffeeScript."
Sintaxe
Quase tudo é uma expressão em CoffeeScript, por exemplo if
, switch
e as for
expressões (que não têm valor de retorno em JavaScript) retornam um valor. Como em Perl , essas instruções de controle também têm versões pós-fixadas; por exemplo, if
também pode ser escrito na consequent if condition
forma.
Muitos parênteses e colchetes desnecessários podem ser omitidos; por exemplo, blocos de código podem ser denotados por indentação em vez de colchetes, chamadas de função são implícitas e literais de objeto geralmente são detectados automaticamente.
Para calcular o índice de massa corporal , pode-se fazer (aqui em JavaScript ):
const mass = 72
const height = 1.78
const BMI = mass / height ** 2
if (18.5 <= BMI && BMI < 25) { alert('You are healthy!') }
Com CoffeeScript, o intervalo é descrito diretamente:
mass = 72
height = 1.78
BMI = mass / height**2
alert 'You are healthy!' if 18.5 <= BMI < 25
Para calcular o máximo divisor comum de dois inteiros com o algoritmo de Euclides , em JavaScript um geralmente precisa de um enquanto loop:
gcd = (x, y) => {
do {
[x, y] = [y, x%y];
} while (y !== 0)
return x
}
Considerando que, em CoffeeScript, pode-se usar uma until
atribuição de desestruturação em vez disso:
gcd = (x, y) ->
[x, y] = [y, x%y] until y is 0
x
Qualquer loop for pode ser substituído por uma compreensão de lista ; de modo que, para calcular os quadrados dos números ímpares positivos menores do que dez (ou seja, números cujo módulo restante 2 é 1), pode-se fazer:
alert n*n for n in [1..10] when n%2 is 1
Como alternativa, existe:
alert n*n for n in [1..10] by 2
Uma pesquisa linear pode ser implementada com uma linha usando a palavra-chave when:
names = ["Ivan", "Joanna", "Nikolay", "Mihaela"]
linearSearch = (searchName) -> alert(name) for name in names when name is searchName
A for ... in
sintaxe permite o loop em arrays, enquanto a for ... of
sintaxe permite o loop em objetos.
A ?
palavra-chave verifica rapidamente se uma variável é null
ou undefined
:
personCheck = ->
if not person? then alert("No person") else alert("Have person")
person = null
personCheck()
person = "Ivan"
personCheck()
Isso alertaria "Nenhuma pessoa" se a variável for null
ou undefined
e "Tenho pessoa" se houver algo lá.
Um snippet de JavaScript comum usando a biblioteca jQuery é:
$(document).ready(function() {
// Initialization code goes here
})
Ou mesmo apenas:
$(function() {
// Initialization code goes here
})
Em CoffeeScript, a function
palavra-chave é substituída pelo ->
símbolo e o recuo é usado em vez de chaves, como em outras linguagens de regra externas, como Python e Haskell. Além disso, os parênteses geralmente podem ser omitidos, usando o nível de indentação em vez de denotar uma função ou bloco. Portanto, o equivalente CoffeeScript do snippet acima é:
$(document).ready ->
# Initialization code goes here
Ou apenas:
$ ->
# Initialization code goes here
A interpolação de strings no estilo Ruby está incluída no CoffeeScript. Strings entre aspas duplas permitem valores interpolados, usando # {...}, e strings entre aspas simples são literais.
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
sentence = "#{ 22 / 7 } is a decent approximation of π"
CoffeeScript foi criticado por suas regras de escopo incomuns. Em particular, ele desautoriza completamente o sombreamento de variável, o que torna o raciocínio sobre o código mais difícil e sujeito a erros em alguns padrões básicos de programação estabelecidos e tidos como certos desde que os princípios de programação procedural foram definidos.
Por exemplo, com o seguinte snippet de código em JavaScript, não é necessário olhar para fora do {}
-block para saber com certeza que nenhuma foo
variável possível no escopo externo pode ser substituída acidentalmente:
// ...
function baz() {
var foo = "bar"
console.log(`foo = ${foo}`)
}
// ...
}
No CoffeeScript não há como saber se o escopo de uma variável está limitado a um bloco ou não sem olhar para fora do bloco.
Desenvolvimento e distribuição
O compilador CoffeeScript é auto-hospedado desde a versão 0.5 e está disponível como um utilitário Node.js. no entanto, o compilador principal não depende do Node.js e pode ser executado em qualquer ambiente JavaScript . Uma alternativa ao utilitário Node.js é o Plugin Coffee Maven, um plugin para o sistema de compilação Apache Maven . O plugin usa o mecanismo Rhino JavaScript escrito em Java .
O site oficial em CoffeeScript.org tem um botão "Try CoffeeScript" na barra de menus; clicar nele abre uma janela modal na qual os usuários podem entrar no CoffeeScript, ver a saída JavaScript e executá-la diretamente no navegador. O site js2coffee oferece tradução bidirecional.
Últimas adições
- Os mapas de origem permitem que os usuários depurem seu código CoffeeScript diretamente, suportando rastreamentos do CoffeeScript em erros de tempo de execução.
- CoffeeScript suporta uma forma de programação literária , usando a extensão de arquivo
.coffee.md
ou.litcoffee
. Isso permite que o código-fonte do CoffeeScript seja escrito em Markdown . O compilador tratará quaisquer blocos recuados (a maneira de Markdown de indicar o código-fonte) como código e ignorará o resto como comentários.
Extensões
Iced CoffeeScript é um superconjunto do CoffeeScript que adiciona duas novas palavras-chave: await
e defer
. Essas adições simplificam o fluxo de controle assíncrono, tornando o código mais parecido com uma linguagem de programação procedural , eliminando a cadeia de retorno de chamada. Ele pode ser usado no lado do servidor e no navegador.
Adoção
Em 13 de setembro de 2012, o Dropbox anunciou que sua base de código do lado do navegador foi reescrita de JavaScript para CoffeeScript, mas foi migrada para TypeScript em 2017.
O guia de estilo interno do GitHub disse uma vez "escreva novo JS em CoffeeScript" e, embora não o faça mais, todos os conselhos no guia de estilo fazem referência a como escrever um bom CoffeeScript, e seu editor de texto Atom também foi escrito na linguagem.
Pixel Game Maker MV usa CoffeeScript como parte de seu ambiente de desenvolvimento de jogos.
Veja também
- Haxe
- Nim (linguagem de programação)
- Amber Smalltalk
- Clojure
- Dart (linguagem de programação)
- Kotlin (linguagem de programação)
- LiveScript
- Opa (linguagem de programação)
- Elm (linguagem de programação)
- TypeScript
- PureScript
Referências
Leitura adicional
- Lee, Patrick (14 de maio de 2014). CoffeeScript em ação (primeira edição). Manning Publications . p. 432. ISBN 978-1617290626.
-
Grosenbach, Geoffrey (12 de maio de 2011). "Meet CoffeeScript" (primeira edição). PeepCode . Citar diário requer
|journal=
( ajuda ) - Bates, Mark (31 de maio de 2012). Programação em CoffeeScript (primeira edição). Addison-Wesley . p. 350. ISBN 978-0-321-82010-5.
- MacCaw, Alex (31 de janeiro de 2012). The Little Book on CoffeeScript (primeira edição). O'Reilly Media . p. 62. ISBN 978-1449321055.
- Burnham, Trevor (3 de agosto de 2011). CoffeeScript: Accelerated JavaScript Development (Primeira edição). Estante pragmática . p. 138 . ISBN 978-1934356784.