Парадигма | Мультипарадигма : основанная на прототипах , функциональная , императивная , скриптовая. |
---|---|
Разработано | Джереми Ашкенас |
Разработчик | Джереми Ашкенас |
Впервые появился | 13 декабря 2009 г . |
Стабильный выпуск | 2.5.1 [1] / 31 января 2020 г . |
Операционные системы | Кроссплатформенность |
Лицензия | Лицензия MIT |
Расширения имени файла | .coffee, .litcoffee [ необходима ссылка ] |
Веб-сайт | coffeescript |
Под влиянием | |
Haskell , JavaScript , Perl , [ необходима ссылка ] Python , [2] Ruby , YAML [3] | |
Под влиянием | |
MoonScript, LiveScript , JavaScript |
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».
Синтаксис [ править ]
Например if
, почти все является выражением в CoffeeScript, switch
а for
выражения (которые не имеют возвращаемого значения в JavaScript) возвращают значение. Как и в Perl , эти управляющие операторы также имеют постфиксные версии; например, if
также можно записать в consequent if condition
форме.
Многие ненужные скобки и фигурные скобки можно опустить; например, блоки кода могут быть обозначены отступом вместо фигурных скобок, вызовы функций являются неявными, а литералы объектов часто обнаруживаются автоматически.
Чтобы вычислить индекс массы тела , можно сделать (здесь, в JavaScript ):
const масса = 72 const высота = 1,78 const ИМТ = масса / рост ** 2 if ( 18,5 < ИМТ && ИМТ < 25 ) { alert ( 'Вы здоровы!' ) }
В CoffeeScript интервал напрямую описывается:
масса = 72 рост = 1,78 ИМТ = масса / рост ** 2 предупреждения «Вы здоровы!» если 18,5 < ИМТ < 25
Для того, чтобы вычислить наибольший общий делитель двух целых чисел с алгоритмом Евклида , в JavaScript один обычно нуждается в то время как цикл:
gcd = ( x , y ) => { do { z = x % y x = y y = z } while ( y ! == 0 ) return x }
Тогда как в CoffeeScript вместо этого можно использовать until
и деструктурирующее присваивание [13] :
НОД = (x, y) -> [ x , y ] = [ y , x % y ], пока y не станет 0 x
Любой цикл for можно заменить составлением списка ; так что для вычисления квадратов положительных нечетных чисел меньше десяти (т.е. чисел, остаток которых по модулю 2 равен 1), можно сделать:
предупреждение n * n для n в [ 1 .. 10 ], когда n % 2 равно 1
В качестве альтернативы есть:
предупреждение n * n для n в [ 1 .. 10 ] на 2
Линейный поиск может быть реализован с помощью однострочника используя при ключевом слове:
names = [ "Иван" , "Иоанна" , "Николай" , "Михаэла" ] linearSearch = (searchName) -> alert ( name ) для имени в именах, если имя - searchName
for ... in
Синтаксис позволяет обработке массивов , а for ... of
синтаксис позволяет перекручивание над объектами.
В ?
ключевых слов проверяет быстро , является ли переменная null
или undefined
:
personCheck = -> если не человек ? затем alert ( "Нет человека" ) else alert ( "Есть человек" ) person = null personCheck () person = "Иван" personCheck ()
Это предупредит «Нет человека», если переменная равна null
или, undefined
и «Есть человек», если там что-то есть.
Типичный фрагмент кода JavaScript, использующий библиотеку jQuery :
$ ( документ ). ready ( function () { // Здесь идет код инициализации })
Или даже просто:
$ ( function () { // Здесь идет код инициализации })
В CoffeeScript function
ключевое слово заменяется ->
символом, а вместо фигурных скобок используется отступ, как в других языках внешних правил, таких как Python и Haskell. Кроме того, круглые скобки обычно можно опустить, используя вместо них уровень отступа для обозначения функции или блока. Таким образом, эквивалент приведенного выше фрагмента для CoffeeScript:
$ ( документ ). готов -> # Здесь идет код инициализации
Или просто:
$ -> # Здесь идет код инициализации
Строковая интерполяция в стиле Ruby включена в CoffeeScript. Строки в двойных кавычках допускают интерполированные значения с использованием # {...}, а строки в одинарных кавычках являются буквальными. [14]
author = "Wittgenstein" quote = "Фотография - это факт. - # { author } "предложение = « # { +22 / +7 } порядочное приближение П»
CoffeeScript критиковали за необычные правила области видимости. [15] [16] В частности, он полностью запрещает скрытие переменных, что делает рассуждения о коде более сложными и подверженными ошибкам в некоторых базовых шаблонах программирования, установленных и принимаемых как должное, поскольку принципы процедурного программирования были определены.
Например, со следующим фрагментом кода в JavaScript не нужно смотреть за пределы {}
-block, чтобы точно знать, что никакая возможная foo
переменная во внешней области не может быть случайно переопределена:
// ... function baz () { var foo = "bar" console . log ( `foo = $ { foo } ` ) } // ... }
В CoffeeScript нет способа определить, ограничена ли область действия переменной блоком или нет, не глядя за пределы блока.
Разработка и распространение [ править ]
Компилятор CoffeeScript размещается на собственном хостинге с версии 0.5 и доступен как утилита Node.js ; однако компилятор ядра не полагается на Node.js и может быть запущен в любой среде JavaScript . [17] Альтернативой утилите Node.js является плагин Coffee Maven, плагин для системы сборки Apache Maven . Плагин использует движок Rhino JavaScript, написанный на Java . [ необходима цитата ]
На официальном сайте CoffeeScript.org есть кнопка «Попробовать CoffeeScript» в строке меню; щелчок по нему открывает модальное окно, в котором пользователи могут ввести CoffeeScript, просмотреть вывод JavaScript и запустить его прямо в браузере. Сайт js2coffee [18] обеспечивает двусторонний перевод.
Последние добавления [ править ]
- Карты исходного кода позволяют пользователям напрямую устранять ошибки в своем коде CoffeeScript, поддерживая трассировку CoffeeScript при ошибках времени выполнения.
- CoffeeScript поддерживает форму грамотного программирования с использованием расширения файла
.coffee.md
или.litcoffee
. Это позволяет писать исходный код CoffeeScript на Markdown . Компилятор будет рассматривать любые блоки с отступом (способ обозначения исходного кода в Markdown) как код, а остальные игнорировать как комментарии.
Расширения [ править ]
Iced CoffeeScript - это расширенный набор CoffeeScript, который добавляет два новых ключевых слова: await
и defer
. Эти дополнения упрощают асинхронный поток управления, делая код больше похожим на процедурный язык программирования , устраняя цепочку обратных вызовов. Его можно использовать как на стороне сервера, так и в браузере. [19]
Принятие [ править ]
13 сентября 2012 года Dropbox объявил, что их кодовая база браузера была переписана с JavaScript на CoffeeScript [20], однако в 2017 году она была переведена на TypeScript [21].
Во внутреннем руководстве по стилю GitHub однажды было сказано: «Напишите новый JS на CoffeeScript», и, хотя этого больше нет, все советы в руководстве по стилю ссылаются на то, как писать хороший CoffeeScript [22], и их текстовый редактор Atom также написан на язык. [23]
Pixel Game Maker MV использует CoffeeScript как часть среды разработки игр. [24]
См. Также [ править ]
- Haxe
- Ним (язык программирования)
- Янтарный Smalltalk
- Clojure
- Дарт (язык программирования)
- Котлин (язык программирования)
- LiveScript
- Опа (язык программирования)
- Elm (язык программирования)
- Машинопись
- PureScript
Ссылки [ править ]
- ^ "Выпуск 2.5.1" . 31 января 2020 . Дата обращения 1 февраля 2020 .
- ^ https://coffeescript.org/ «CoffeeScript заимствует связанные сравнения из Python»
- ^ Хеллер, Мартин (18 октября 2011 г.). «Поднимите нос на Дарта и понюхайте CoffeeScript» . InfoWorld . Проверено 15 июля 2020 .
- ^ Alex MacCaw (январь 2012). Маленькая книга о CoffeScript . O'Reilly Media . ISBN 978-1-4493-2105-5.
- ↑ Джош Пик (13 апреля 2011 г.). «Твит члена основной группы Rails» .
- ^ «AssetsCoffeeScript - 2.5.x» . www.playframework.com . Проверено 31 октября 2016 .
- ^ Эйх, Брендан. « Гармония моей мечты »
- ^ Эйх, Брендан. " Моя презентация JSConf.US "
- ^ Github. 'начальная фиксация загадочного языка'
- ^ Hacker News. Объявление CoffeeScript 1.0.0, опубликованное Джереми Ашкенасом 24 декабря 2010 г.
- ^ Hacker News. Оригинальное объявление CoffeeScript, опубликованное Джереми Ашкенасом 24 декабря 2009 г.
- ^ coffeescript.org представляет CoffeeScript 2
- ^ CoffeeScript называет это « сопоставлением с образцом », что является нестандартным использованием этого термина.
- ^ "Официальная страница CoffeeScript" . Проверено 20 ноября 2013 года .
- ^ «Проблема неявного определения области видимости в CoffeeScript» . Проверено 13 октября 2018 .
- ^ "Обзор CoffeeScript - это безумие" . Проверено 13 октября 2018 .
- ^ CoffeeScript архивации 2012-04-27 в Wayback Machine . Jashkenas.github.com. Проверено 21 июля 2013.
- Перейти ↑ Sta Cruz, Rico. "js2coffee" . Дата обращения 11 мая 2014 .
- ^ "Официальный сайт IcedCoffeeScript" .
- ^ Уиллер, Дэн; Махковец, Зига; Варенхорст, Крис (13 сентября 2012 г.). «Dropbox погружается в CoffeeScript» . Проверено 11 мая 2013 года .
- ↑ Голдштейн, Дэвид (13 мая 2020 г.). «Великий CoffeeScript к миграции машинописных текстов в 2017 году» . Dropbox.Tech . Проверено 30 июня 2020 .
- ^ "JavaScript · Руководство по стилям · GitHub" . Github.com. Архивировано из оригинала на 2013-08-15 . Проверено 30 ноября 2015 .
- ^ Исходный код Atom . github.com. Проверено 22 июля 2015.
- ^ Каллен, Дэниел. "PIXEL GAME MAKER MV (ПК)" . Игра, ориентированная на Христа . Проверено 15 января 2021 года .
Дальнейшее чтение [ править ]
- Ли, Патрик (14 мая 2014 г.). CoffeeScript в действии (первое издание). Публикации Мэннинга . п. 432. ISBN. 978-1617290626.
- Грозенбах, Джеффри (12 мая 2011 г.). «Знакомьтесь, CoffeeScript» (Первое изд.). PeepCode . Цитировать журнал требует
|journal=
( помощь ) - Бейтс, Марк (31 мая 2012 г.). Программирование в CoffeeScript (Первое изд.). Эддисон-Уэсли . п. 350. ISBN 978-0-321-82010-5.
- МакКоу, Алекс (31 января 2012 г.). Маленькая книга по CoffeeScript (первое издание). O'Reilly Media . п. 62. ISBN 978-1449321055.
- Бёрнем, Тревор (3 августа 2011 г.). CoffeeScript: ускоренная разработка JavaScript (первое издание). Прагматическая книжная полка . п. 138 . ISBN 978-1934356784.
Внешние ссылки [ править ]
- Официальный веб-сайт