Andrew Chalkley
escreve em 31 de janeiro de 2013
CoffeeScript tem se tornado cada vez mais popular nos últimos anos devido à sua adoção pelo Nó.js e Rails. Vamos dar uma olhada por que ele se tornou a linguagem go-to quando as pessoas estão querendo escrever JavaScript em seus aplicativos.o que é CoffeeScript?
CoffeeScript é uma linguagem que é compilada para JavaScript. Código dentro .arquivos de café não são interpretados em tempo de execução, como JavaScript, mas são compilados em .ficheiros js.
Se você está escrevendo para JavaScript para o nó.js ou qualquer implementação de navegador dado, CoffeeScript pode ser escrito para qualquer e todos os sabores de JavaScript.porquê CoffeeScript?
no passado, JavaScript não teve a maior parte das reputações devido à mentalidade copy-and-paste dos anos 90 e início dos anos 2000, parecia que apenas alguns tinham alguma idéia do que estava acontecendo. Foi visto como uma linguagem não tão “séria”. No entanto, JavaScript como uma linguagem tem muito a oferecer e tem algumas SUPER características.
CoffeeScript faz uso das características poderosas do JavaScript sem aprender as características menos conhecidas do JavaScript, adicionando” syntactic sugar ” ao JavaScript. CoffeeScript não tem os semi-colões e chavetas, sintaxe semelhante à de Python e Ruby.
isto significa que você pode escrever menos código e fazer as coisas mais rápido. Também facilita a leitura e a manutenção.
devido a otimizações CoffeeScript usa, quando é compilado para baixo, o JavaScript resultante é tão performante ou, em alguns casos, é ainda mais performante sobre código escrito à mão.
Você pode aprender muito sobre JavaScript olhando para o JavaScript que CoffeeScript compila até. Se há algo novo que você vê lá, pesquisá-lo e ver por que CoffeScript compila dessa forma, em vez do que você está acostumado a ver.
- instalando CoffeeScript
- On OS X
- no nó de visita do Windows
- e finalmente
- Utilização da linha de comandos
- Executar e Compilar
- Warning
- Observador
- juntar os ficheiros
- REPL
- Editor de texto realce
- TextMate
- Texto Sublime 2
- The Good Stuff a. k. a. The Syntax
- Variables
- Strings
- funções
- Arrays
- objetos
- os intervalos
- Splat
- Classes
- Instance Variables
- Herança de Classe
- sintaxe geral
- Existential Operator
- as compreensões
- conclusão
instalando CoffeeScript
vamos instalar CoffeeScript para que você possa seguir adiante. CoffeeScript é um nó.pacote js. Então depende do nó.js e o Gestor de pacotes (npm).
On OS X
Node.o js pode ser instalado usando o Homebrew, um gerenciador de pacotes de código aberto para o OS X. Você pode rever o processo de instalação do Homebrew aqui.
certifique-se que o seu Homebrew está actualizado escrevendo brew update
no seu terminal.
a fórmula Homebrew para nó.js is node
. Para instalar o nó.js você digita em brew install node
no seu terminal. Siga quaisquer instruções adicionais que apareçam se você precisar alterar PATH
s ou algo do género.
então escreva npm install -g coffee-script
para instalá-lo globalmente.
no nó de visita do Windows
.site da js e pressione o botão “Instalar”. Ele deve detectar automaticamente o seu sabor das janelas que você está usando e um instalador vai começar a baixar.
passar pelo processo de instalação.
Uma vez instalado, abra a sua linha de comandos e escreva npm install -g coffee-script
para a instalar globalmente.
e finalmente
Tipo coffee -v
na sua linha de comandos para ver se foi instalado correctamente.
Utilização da linha de comandos
o compilador coffee
pode ser usado de várias formas. Aqui estão alguns para ver o que está disponível.
Executar e Compilar
O seguinte comando irá compilar todos os seus .coffee
arquivos em uma pasta chamada coffeescripts
.js
arquivos em um paralelo estrutura de árvore javascripts
pasta.
coffee -o javascripts/ -c coffeescripts/
Warning
the option -c
means to compile and -o
means the output folder. Note que a ordenação é saída e depois compile. Isto é porque se você mudar a ordem não funciona!
Observador
executando o comando acima sempre que quiser compilar ficheiros CoffeeScript para que haja outra opção útil a usar, -w
.
coffee -w -o javascripts/ -c coffeescripts/
o observador ouve as mudanças nos arquivos nocoffeescripts
pasta e compila-os na hora.
Se adicionar um novo ficheiro à pastacoffeescripts
deverá compilar, no entanto, se adicionar uma nova pasta e um ficheiro CoffeeScript dentro do qual não será compilado. Isto pode mudar em versões posteriores.
juntar os ficheiros
Pode também compilar todos os seus ficheiros .coffee
até um único ficheiro JavaScript. Isso reduzirá o número de pedidos HTTP que um navegador tem que fazer e melhorar o desempenho. Para fazer isso use o -j
opção assim:
coffee -j javascripts/app.js -c coffeescripts/*.coffee
*
é um operador de caractere curinga.
REPL
Se escrever coffee
sem quaisquer opções abre-se uma linha de comandos interactiva. Isto é semelhante airb
em Ruby. Esta é uma grande ferramenta para as coisas no console e realizar experimentos rápidos.
Editor de texto realce
Se você vai codificar em CoffeeScript a melhor coisa a fazer é ter realce de sintaxe.
TextMate
Jeremy Ashkenas, inventor de CoffeeScript, criou um pacote de TextMate útil. Para instruções de instalação, aqui.
Texto Sublime 2
Texto Sublime 2 tem um plugin criado pelo usuário do GitHub Xavura. Você pode instalar isso através do controle Sublime de pacotes, se você já tem isso.
The Good Stuff a. k. a. The Syntax
Variables
Variables in CoffeeScript don’t require the keyword var
. Basta nomear a sua variável, um sinal igual, e então o valor.
year = 1985speed = 88
Strings
Strings são declaradas com citações como na maioria das outras línguas.
first_name = "Marty"
Para entrar ou concatenar cadeias de caracteres, você pode listá-los um após o outro com um sinal de mais no meio, assim:
full_name = first_name + " McFly"
Você também pode incluir o símbolo de hash (#
), seguido por chavetas, e dentro destas a variável de seqüência de caracteres.
full_name = "#{first_name} McFly"
os dois exemplos acima criariam a cadeia Marty McFly
.
o último tipo de interpolação de texto só funciona quando você usa aspas duplas. Se você usar aspas simples, o texto é mostrado “como está”. Strings de aspas simples são strings literais.
full_name = '#{first_name} McFly'
assim o acima será a cadeia de#{first_name} McFly
. Isto espelha o comportamento.
funções
funções são declaradas nomeando a função, igual a sinal, e então um símbolo de função especial (->
).
initialize_time_circuits = -> year * flux_capacitor_constant * speed
não Temos usado a palavra-chave return
porque cada função em CoffeeScript retorna o resultado da última linha de código.
funções multi-forradas são gravadas em várias linhas com cada linha após a declaração ter algum espaço em branco antes dela.
initialize_time_circuits = -> year = 1885 year * flux_capacitor_constant * speed
This would set the year to 1885
every time. Se queremos que o ano deve ser muito mais flexível, mas tem um padrão que podemos trazer para o método declaraion como este:
initialize_time_circuits = (speed, year = 1885) -> year * flux_capacitor_constant * speed
Isso vai significar podemos então chamar esta com um valor de speed
year
padrão será sempre 1885
.
initialize_time_circuits(88)
Você também pode chamar métodos sem usar parêntesis. O acima também pode ser escrito como:
initialize_time_circuits 88
Arrays
Existem várias maneiras diferentes de inicializar e declarar arrays em CoffeeScript. Deve estar habituado a ver arrays declarados com parêntesis rectos e valores separados por vírgulas.
mcflys =
Você também pode declarar matrizes em várias linhas como esta:
mcflys =
Você tem que ter espaço em branco em cada linha.opcionalmente, pode remover a vírgula final de cada linha.
mcflys =
Você também pode usar uma combinação destes dois estilos de declaração.
o exemplo seguinte…
woah =
…é o equivalente a:
woah =
que pode ser mais ou menos legível dependendo da sua aplicação. CoffeeScript permite que você faça isso de uma variedade de maneiras para atender às suas necessidades.
objetos
objetos literais ou traços de objetos podem ser declarados como suas contrapartes JavaScript e em algumas outras formas funky.
Dado o seguinte JSON…
…você pode soltar as vírgulas e chavetas:
Enquanto você travessão, com algum espaço em branco, a estrutura fica aninhada, como seria de esperar.
os intervalos
os intervalos são declarados por dois inteiros separados por dois períodos, embrulhados entre parêntesis rectos.
days =
os intervalos não são um tipo de objeto padrão em Javascript por isso eles são compilados para arrays.
para obter uma sub-seção de um array você pode passar em um intervalo também. Want to get days from tuesday_to_friday
where Monday is 1
and Sunday is 7
? Como as matrizes são indexadas a zero, começaríamos à 1 e terminaríamos às 4.
days = tuesday_to_friday = days
Pode substituir secções inteiras de arrays de uma forma semelhante também.
O seguinte…
days =
Modifica days
array para ser .
Você pode usar intervalos para contagem regressiva demasiado por exemplo, seria
10
0
.
Splat
a splat é uma maneira conveniente de aceitar vários valores como argumentos para os métodos.
no exemplo a seguir queremos premiar pontos de kudos a um grupo de usuários do fórum para o número de posts em uma dada semana.
A primeira pessoa recebe 10 pontos, a segunda recebe 6, a terceira recebe 2 e cada um receberá um único ponto.
Vamos criar uma função giveKudos
Com first
second
e third
como parâmetros. Para o resto bem usar um splat, que é o nome da variável seguida por 3 períodos. Within the giveKudos
method let’s call an un implemented addKudosToUser
which takes two parameters, the user and the points to be added. Não nos vamos preocupar com a implementação.é só para fins ilustrativos.
giveKudos = (first, second, third, rest...) -> addKudosToUser first, 10 addKudosToUser second, 6 addKudosToUser third, 2
Next we can use a for in
to loop over the rest
.
dado que temos uma lista de utilizadores:
users =
we want Pasan to get 10 points, Amit to get 6, Jim to get 2 and then the rest to get 1.
Temos de passar no blog com os prazos para o método para atribuir corretamente a matriz de valores para os parâmetros assim:
giveKudos users...
Sem esses períodos, users
obter atribuiu o first
parâmetro e undefined
para o resto.
Classes
Classes podem ser declaradas trivialmente em CoffeeScript, que é um Refrescante contraste com o JavaScript muito mais verboso.
primeiro escreva a palavra-chave class
, seguida pelo nome da sua classe.os métodos
, incluindo o método do Construtor, são escritos com o nome do método seguido por dois pontos. Espaço em branco é necessário antes de cada nome do método. Você pode então usar o operador de função (->
).
class TimeMachine constructor: ->
para instanciar uma instância de um objeto, use a palavra-chave new
seguido pelo nome da classe.
time_machine = new TimeMachine
Instance Variables
Instance variables start with an @
symbol. Então podemos ter um piloto
class TimeMachine constructor: (pilot) -> @pilot = pilot
você pode acessá-los através de notação de ponto também.
class TimeMachine constructor: (pilot) -> @pilot = pilot time_machine = new TimeMachine "H. G. Wells"console.log time_machine.pilot
No exemplo acima, a stringH. G. Wells
seria impressa no console.
em Vez de @pilot = pilot
você pode escrevê-lo em forma abreviada, como este:
class TimeMachine constructor: (@pilot) ->
Herança de Classe
Para escrever uma subclasse, você pode usar extends
como este:
class Tardis extends TimeMachineclass DeLorean extends TimeMachine
Vamos dizer TimeMachine
tem um método go
com um parâmetro que é registrado quando a Máquina do Tempo está prestes a viajar no tempo.
class TimeMachine constructor: (@pilot) -> go: (noise) -> console.log noise
now let’s for each time machine implement go and call thesuper
method.
so calling go()
on instances of both time machines will print out it’s own respective sound.
sintaxe geral
com CoffeeScript você vai encontrar o seu código mais parecido com uma frase em inglês:
light_bulbs() if switch is on
que é o mesmo que:
light_bulbs() unless switch is not on
embora o último seja mais difícil de analisar do que o primeiro, ele mostra-lhe o âmbito do novo açúcar.
Aqui está uma tabela de equivalentes da página de documentação do CoffeeScript sobre operadores e pseudônimos.
CoffeeScript | JavaScript |
---|---|
é | === |
não | !== |
não | ! |
and | && |
or | || |
true, yes, on | true |
false, no, off | false |
@, this | this |
of | in |
in | no JS equivalent |
Existential Operator
CoffeeScript brings another cool operator to the table called the Existential Operator, which is a question mark (?
).
digamos que um user
ainda não assinou e foi definido. Você deseja que a função de login para ser chamado se o user
não está presente, então basta usar o Operador Existencial, como por exemplo:
login() if not user?
Você também pode definir valores padrão, como por exemplo:
year ?= 1885
Você pode usar o Operador Existencial em uma forma similar a um operador ternário. O exemplo seguinte definiria saudação para ser tanto message
, se não undefined
ou a cadeia `”Hello, World!”.
greeting = message ? "Hello, World!"
finalmente há uma variante de acessor que você pode usar absorver aténull
referências quando você está encadeando propriedades em conjunto.
ip = securitySystem.lastUser?().remoteSystem?.ipAddress
Então, em vez de levantar um TypeError
isso retornaria undefined
.
as compreensões
as compreensões podem tornar o seu código mais legível. No nosso exemplo de kudos tínhamos ofor
loop passando por duas linhas, quando podíamos tê-lo escrito numa linha como esta:
outra característica legal de looping sobre as coisas em CoffeeScript é que o loop retorna uma matriz dos resultados desse loop. Digamos que quero contar de 0 a 100 em múltiplos de 10. Tudo o que faço é preparar o meu ciclo com uma atribuição variável como assim:
adicionando parêntesis você pode trazê-lo para uma linha também!
conclusão
Woah! Isso foi muito para absorver, mas como você pode ver CoffeeScript está cheio de saborosa sintaxe açucarada. Por que não dar uma festa no seu próximo projeto JavaScript e ver o que ele compila abaixo do capô?
- guide to CoffeeScript
- learn programming
- make a website
coffeescript CoffeeScript