CoffeeScript — это язык программирования , который компилируется в JavaScript . Он добавляет синтаксический сахар, вдохновленный Ruby , Python и Haskell , в попытке улучшить краткость и читабельность JavaScript. [4] Конкретные дополнительные функции включают понимание списков и деструктурирующее присваивание .
Поддержка CoffeeScript включена в Ruby on Rails версии 3.1 [5] и Play Framework . [6] В 2011 году Брендан Эйх ссылался на CoffeeScript как на источник влияния на его мысли о будущем JavaScript. [7] [8]
13 декабря 2009 года Джереми Ашкенас сделал первый коммит Git CoffeeScript с комментарием «первоначальный коммит таинственного языка». [9] Компилятор был написан на Ruby. 24 декабря он сделал первый помеченный и документированный релиз, 0.1.0. 21 февраля 2010 года он сделал коммит версии 0.5, которая заменила компилятор Ruby на самостоятельную версию на чистом CoffeeScript. К тому времени проект привлек несколько других участников на GitHub и получал более 300 посещений страниц в день.
24 декабря 2010 года Ашкенас объявил о выпуске стабильной версии 1.0.0 на Hacker News , сайте, где проект был анонсирован впервые. [10] [11]
18 сентября 2017 года была представлена версия 2.0.0 [12] , которая «целью является внедрение CoffeeScript в современную эпоху JavaScript, устранение пробелов в совместимости с JavaScript и сохранение чистого синтаксиса, который является отличительной чертой CoffeeScript».
Почти все является выражением в CoffeeScript, например, if
, switch
а for
выражения (которые не имеют возвращаемого значения в JavaScript) возвращают значение. Как и в Perl и Ruby, эти управляющие операторы также имеют постфиксные версии; например, if
также может быть записано в consequent if condition
форме.
Многие ненужные скобки и фигурные скобки можно опустить; например, блоки кода можно обозначить отступами вместо фигурных скобок, вызовы функций будут неявными, а литералы объектов часто будут определяться автоматически.
Чтобы вычислить индекс массы тела в JavaScript , можно написать:
пусть масса = 72 ; пусть рост = 1,78 ; пусть ИМТ = масса / рост ** 2 ; если ( 18,5 <= ИМТ && ИМТ < 25 ) alert ( 'Вы здоровы!' );
С помощью CoffeeScript интервал описывается напрямую:
масса = 72 рост = 1,78 ИМТ = масса / рост ** 2 оповещение «Вы здоровы!», если 18,5 <= ИМТ < 25
Чтобы вычислить наибольший общий делитель двух целых чисел с помощью алгоритма Евклида , в JavaScript обычно требуется цикл while :
пусть gcd = ( x , y ) => { do { [ x , y ] = [ y , x % y ]; } while ( y !== 0 ) return x ; }
Тогда как в CoffeeScript вместо этого можно использовать until
[13] :
gcd = (x, y) -> [ x , y ] = [ y , x % y ] пока y не станет равным 0 x
Ключевое ?
слово быстро проверяет, является ли переменная null
или undefined
:
personCheck = -> если не человек ? тогда alert ( "Нет человека" ) else alert ( "Есть человек" ) person = null personCheck () person = "Иван" personCheck ()
Это выведет предупреждение «Нет человека», если переменная равна null
или , undefined
и «Есть человек», если там что-то есть.
Обычный фрагмент JavaScript до ES6 , использующий библиотеку jQuery :
$ ( document ) .ready ( function () { // Здесь находится код инициализации });
Или даже просто:
$ ( function () { // Здесь находится код инициализации });
В CoffeeScript function
ключевое слово заменяется символом ->
, а отступ используется вместо фигурных скобок, как в других языках с правилами off-side, таких как Python и Haskell. Кроме того, скобки обычно можно опустить, используя вместо этого уровень отступа для обозначения функции или блока. Таким образом, эквивалент фрагмента выше в CoffeeScript выглядит так:
$ ( document ). ready -> # Код инициализации находится здесь
Или просто:
$ -> # Здесь находится код инициализации
Интерполяция строк в стиле Ruby включена в CoffeeScript. Строки в двойных кавычках допускают интерполированные значения, используя #{ ... }, а строки в одинарных кавычках являются литеральными. [14]
автор = "Витгенштейн" цитата = "Картина — это факт. -- #{ автор } " предложение = " #{ 22 / 7 } является хорошим приближением числа π"
Любой цикл for можно заменить списковым включением ; так, чтобы вычислить квадраты положительных нечетных чисел, меньших десяти (т.е. чисел, остаток которых по модулю 2 равен 1), можно сделать следующее:
alert n * n для n в [ 1 .. 10 ] когда n % 2 равно 1
В качестве альтернативы есть:
оповещение n * n для n в [ 1 .. 10 ] по 2
Линейный поиск можно реализовать с помощью однострочного оператора с ключевым словом when:
names = [ "Иван" , "Джоанна" , "Николай" , "Михаэла" ] linearSearch = (searchName) -> alert ( name ) для имени в именах , когда имя - searchName
Синтаксис for ... in
позволяет выполнять цикл по массивам, а for ... of
синтаксис позволяет выполнять цикл по объектам.
CoffeeScript подвергался критике за свои необычные правила области действия . [15] [16] В частности, он полностью запрещает затенение переменных , что затрудняет рассуждения о коде и делает их подверженными ошибкам в некоторых базовых шаблонах программирования, установленных и принимаемых как должное с тех пор, как были определены принципы процедурного программирования .
Например, с помощью следующего фрагмента кода на JavaScript не нужно выходить за пределы блока, {}
чтобы точно знать, что никакая возможная foo
переменная во внешней области видимости не может быть случайно переопределена:
// ... функция baz () { var foo = " bar" ; console.log ( `foo = ${ foo } ` ); } // ... }
В CoffeeScript нет способа определить, ограничена ли область действия переменной блоком или нет, не заглянув за пределы блока.
Компилятор CoffeeScript размещается самостоятельно с версии 0.5 и доступен как утилита Node.js ; однако основной компилятор не зависит от Node.js и может быть запущен в любой среде JavaScript . [17] Одной из альтернатив утилите Node.js является Coffee Maven Plugin, плагин для системы сборки Apache Maven . Плагин использует движок Rhino JavaScript, написанный на Java . [ требуется цитата ]
На официальном сайте CoffeeScript.org в строке меню есть кнопка «Попробовать CoffeeScript»; нажатие на нее открывает модальное окно, в котором пользователи могут ввести CoffeeScript, увидеть вывод JavaScript и запустить его прямо в браузере. Сайт js2coffee [18] обеспечивает двунаправленный перевод.
.coffee.md
или .litcoffee
. Это позволяет писать исходный код CoffeeScript в Markdown . Компилятор будет обрабатывать любые отступы (способ Markdown обозначать исходный код) как код и игнорировать остальное как комментарии.Iced CoffeeScript — это надмножество CoffeeScript, которое добавляет два новых ключевых слова: await
и defer
. Эти дополнения упрощают асинхронный поток управления, делая код более похожим на процедурный язык программирования , устраняя цепочку обратных вызовов. Его можно использовать на стороне сервера и в браузере. [19]
13 сентября 2012 года Dropbox объявила, что их кодовая база браузера была переписана с JavaScript на CoffeeScript [20] , однако в 2017 году она была переведена на TypeScript [21].
Внутреннее руководство по стилю GitHub когда-то гласило: «Пишите новый JS на CoffeeScript», хотя теперь это уже не так, [22] и их текстовый редактор Atom также был написан на этом языке, а его конфигурация была написана на CSON («CoffeeScript Object Notation»), варианте JSON . [23] [24]
Pixel Game Maker MV использует CoffeeScript как часть своей среды разработки игр. [25]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )