Pull to refresh

Coffeescript — Javascript в силе Ruby

Reading time2 min
Views22K
CoffeeScript — язык, чтобы писать на JavaScript с более удобным синтаксисом.

Краткий пример на CoffeeScript (с jQuery):
jQuery($ =>
 notified: false
 $('a').click( =>
  if notified
   true
  else
   $('.alert').show()
   false..
 ).
)

Этот код будет транслирован в:
jQuery(function($) {
  var notified = false;
  $('a').click(function() {
    if (notified) {
      return true;
    } else {
      $('.alert').show()
      return false;
    }
  })
})


Введение


JavaScript — отличный язык: хорошая идеология прототипного ООП, отличные виртуальные машины типа V8 и прекрасное будущее короля веб-клиентов. С распространением HTML 5, он начнёт теснить Flash и Silverlight. И недавно JS начали рассматривать и как серверный язык (например, node.js).

Вот только в современном мире синтаксического сахара код JavaScript немного тяжёл. При каждой лямбде неправильно писать длинную строку function() { … }, не хватает switch-when и foreach для массивов1. После Ruby и Python даже скобки вокруг условия в if или обязательные return кажется лишними символами.

Вот бы тот же JavaScript, только с немного другим синтаксисом. И успешные примеры смены синтаксиса у нас есть: Haml и Sass для HTML и CSS, соответственно. Они не скрывают от на вёрстку (как ужасный WebForms), а просто позволяют записывать этот же код с немного другим синтаксисом, но мы постоянно контролируем результат трансляции.

CoffeeScript


CoffeeScript для JavaScript, как Haml для HTML. Позволяет записывать тот же код, немного по другому:
Операторы

У операторов if и while убраны лишние символы:
while a < 20
 a += 1.

А так же есть короткая форма для одной строки
student.passed(exam.subject) if exam.mark > 2

Лямбда

Упрощает синтаксис лямбды. В CoffeeScript, так же как и в Ruby, любая функция возвращает последнее значение.
square: x =>
 x * x.
square(2)

Массивы

Позволяет работать с массивами как в Python:
# В codes будет ['toast', 'cheese', 'wine']
codes: food.toLowerCase() for food in ['Toast', 'Cheese', 'Wine'].
# Выделить чётные ячейки таблицы
highlight(row) for row, i in table if i % 2 == 0.

И позволяет проще получать подстроку или часть массива:
"abcdef"[0..3]

numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
three_to_six: numbers[3..6]
.


Более подробно можно посмотреть на сайте CoffeeScript.

Инструменты


Транслятор CoffeeScript написан на Ruby и распространяется через RubyGems:
gem install coffee-script

С помощью него можно транслировать ваши .coffee файлы в обычный JavaScript-код:
coffee application.coffee

Чтобы не забыть оттранслировать файл и не искать призрачную ошибку, можно указать автоматически транслировать все .coffee файлы при изменении:
coffee -w *.coffee

Установив Narwhal можно экспериментировать с CoffeeScript в интерактивной консоли или выполнять coffee-скрипты вне браузера.

Примечания


1 — В JavaScript 1.6 есть Array#forEach(), а в jQuery есть $.each(), но они работают медленнее и длинная лямбда всё равно их губит.
Tags:
Hubs:
+6
Comments120

Articles

Change theme settings