CoffeeScript - CoffeeScript - Wikipedia
Парадигма | Мультипарадигма: на основе прототипа, функциональный, императив, сценарии |
---|---|
Разработано | Джереми Ашкенас |
Разработчик | Джереми Ашкенас |
Впервые появился | 13 декабря 2009 г. |
Стабильный выпуск | 2.5.1 / 31 января 2020 г.[1] |
Операционные системы | Кроссплатформенность |
Лицензия | Лицензия MIT |
Расширения имени файла | .coffee, .litcoffee[нужна цитата ] |
Интернет сайт | кофескрипт |
Под влиянием | |
Haskell, JavaScript, Perl,[нужна цитата ] Python,[2] Рубин, YAML[3] | |
Под влиянием | |
MoonScript, LiveScript, JavaScript |
CoffeeScript это язык программирования, который компилируется в JavaScript. Он добавляет синтаксический сахар вдохновлен Рубин, Python и Haskell в попытке повысить краткость и удобочитаемость JavaScript.[4] Конкретные дополнительные функции включают понимание списка и деструктуризация.
Поддержка CoffeeScript включена в Рубин на рельсах версия 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 для Хакерские новости, сайт, на котором анонсировали проект впервые.[10][11]
18 сентября 2017 года была представлена версия 2.0.0,[12] который «направлен на то, чтобы перенести CoffeeScript в современную эру JavaScript, устраняя пробелы в совместимости с JavaScript, сохраняя при этом чистый синтаксис, который является отличительной чертой CoffeeScript».
Синтаксис
Практически все является выражением в CoffeeScript, например если
, выключатель
и за
выражения (которые не имеют возвращаемого значения в JavaScript) возвращают значение. Как в Perl, эти операторы управления также имеют постфиксные версии; Например, если
также можно записать в последующее, если условие
форма.
Многие ненужные скобки и фигурные скобки можно опустить; например, блоки кода могут быть обозначены отступом вместо фигурных скобок, вызовы функций неявны, а литералы объектов часто обнаруживаются автоматически.
Чтобы вычислить индекс массы тела, можно (здесь, в JavaScript ):
const масса = 72const высота = 1.78const ИМТ = масса / высота ** 2если (18.5 < ИМТ && ИМТ < 25) { тревога('Вы здоровы!') }
В CoffeeScript интервал напрямую описывается:
масса = 72высота = 1.78ИМТ = масса / высота**2тревога 'Вы здоровы!' если 18.5 < ИМТ < 25
Чтобы вычислить наибольший общий делитель двух целых чисел с евклидов алгоритм, в JavaScript обычно требуется пока петля:
gcd = (Икс, у) => { делать { z = Икс % у Икс = у у = z } пока (у !== 0) возвращаться Икс}
В то время как в CoffeeScript можно использовать до того как
и деструктуризация[13] вместо:
gcd = (х, у) -> [Икс, у] = [у, Икс%у] до того как у является 0 Икс
Любой за цикл можно заменить на понимание списка; так что для вычисления квадратов положительных нечетных чисел меньше десяти (т.е. чисел, остаток которых по модулю 2 равен 1), можно сделать:
тревога п*п за п в [1..10] когда п%2 является 1
В качестве альтернативы есть:
тревога п*п за п в [1..10] к 2
А линейный поиск может быть реализован с помощью однострочника с использованием ключевого слова when:
имена = ["Иван", "Джоанна", "Николай", «Михаэла»]linearSearch = (searchName) -> тревога(имя) за имя в имена когда имя является searchName
В для ... в
синтаксис позволяет перебирать массивы, пока для ... из
синтаксис позволяет перебирать объекты.
В ?
ключевое слово быстро проверяет, является ли переменная ноль
или же неопределенный
:
personCheck = -> если нет человек? тогда тревога("Нет человека") еще тревога("Иметь человека")person = нольpersonCheck()person = "Иван"personCheck()
Это предупредит "Никто", если переменная ноль
или же неопределенный
и «Иметь человека», если там что-то есть.
Обычный фрагмент кода JavaScript с использованием jQuery библиотека:
$(документ).готовы(функция() { // Код инициализации идет сюда})
Или даже просто:
$(функция() { // Код инициализации идет сюда})
В CoffeeScript функция
ключевое слово заменяется на ->
символ, а вместо фигурных скобок используется отступ, как в других вне игры такие языки, как Python и Haskell. Кроме того, круглые скобки обычно можно опустить, используя вместо них уровень отступа для обозначения функции или блока. Таким образом, эквивалент приведенного выше фрагмента для CoffeeScript:
$(документ).готовы -> # Код инициализации находится здесь
Или просто:
$ -> # Код инициализации находится здесь
Интерполяция строк в стиле Ruby включена в CoffeeScript. Строки в двойных кавычках допускают интерполированные значения с использованием # {...}, а строки в одинарных кавычках являются буквальными.[14]
автор = "Витгенштейн"цитата = «Фотография - это факт. - #{ автор }"предложение = "#{ 22 / 7 } хорошее приближение к π "
CoffeeScript подвергался критике за необычные правила охвата.[15][16] В частности, он полностью запрещает переменное затенение что усложняет рассуждение о коде и делает возможными ошибки в некоторых основных шаблонах программирования, установленных и принимаемых как должное с тех пор, как процедурное программирование были определены принципы.
Например, с помощью следующего фрагмента кода в JavaScript никто не должен смотреть за пределы {}
-блок, чтобы знать, что это невозможно фу
переменная во внешней области видимости может быть случайно переопределена:
// ... функция баз() { вар фу = "бар" консоль.бревно(`foo = ${фу}`) } // ...}
В CoffeeScript нет способа определить, ограничена ли область действия переменной блоком или нет, не глядя за пределы блока.
Разработка и распространение
Компилятор CoffeeScript был самостоятельный хостинг начиная с версии 0.5 и доступен как Node.js полезность; однако основной компилятор не полагается на Node.js и может быть запущен в любом JavaScript среда.[17] Одна альтернатива Node.js Утилита - это плагин Coffee Maven, плагин для Apache Maven система сборки. Плагин использует Носорог Движок JavaScript, написанный на Ява.[нужна цитата ]
На официальном сайте CoffeeScript.org есть кнопка «Попробовать CoffeeScript» в строке меню; щелчок по нему открывает модальное окно, в котором пользователи могут ввести CoffeeScript, просмотреть выходные данные JavaScript и запустить его прямо в браузере. Js2coffee[18] сайт обеспечивает двунаправленный перевод.
Последние добавления
- Карты исходного кода позволяют пользователям напрямую устранять ошибки в своем коде CoffeeScript, поддерживая трассировку CoffeeScript при ошибках времени выполнения.
- CoffeeScript поддерживает форму Грамотное программирование, с использованием
.coffee.md
или же.litcoffee
расширение файла. Это позволяет писать исходный код CoffeeScript на Markdown. Компилятор будет рассматривать любые блоки с отступом (способ обозначения исходного кода в Markdown) как код, а остальные игнорировать как комментарии.
Расширения
Iced CoffeeScript - это расширенный набор CoffeeScript, который добавляет два новых ключевых слова: Ждите
и отложить
. Эти дополнения упрощают асинхронный поток управления, делая код более похожим на процедурное программирование язык, устраняя цепочку обратных вызовов. Его можно использовать на стороне сервера и в браузере.[19]
Принятие
13 сентября 2012 г. Dropbox объявили, что их кодовая база на стороне браузера была переписана с JavaScript в CoffeeScript,[20] однако он был перенесен на Машинопись в 2017 году.[21]
GitHub во внутреннем руководстве по стилю однажды было сказано «напишите новый JS на CoffeeScript», и, хотя этого больше нет, все советы в руководстве по стилю содержат ссылки на то, как написать хороший CoffeeScript,[22] и их Текстовый редактор Atom также написано на этом языке.[23]
Смотрите также
- Haxe
- Ним (язык программирования)
- Янтарный Smalltalk
- Clojure
- Dart (язык программирования)
- Котлин (язык программирования)
- LiveScript
- Опа (язык программирования)
- Вяз (язык программирования)
- Машинопись
- PureScript
Рекомендации
- ^ "GitHub - jashkenas / coffeescript: Unfancy JavaScript". 27 октября 2019 г. - через GitHub.
- ^ https://coffeescript.org/ «CoffeeScript заимствует цепочечные сравнения у Python»
- ^ Хеллер, Мартин (18 октября 2011 г.). «Поднимите нос на Дарта и понюхайте CoffeeScript». InfoWorld. Получено 2020-07-15.
- ^ Алекс Маккоу (январь 2012 г.). Маленькая книга о CoffeScript. O'Reilly Media. ISBN 978-1-4493-2105-5.
- ^ Джош Пик (13 апреля 2011 г.). «Твит члена основной группы Rails».
- ^ «AssetsCoffeeScript - 2.5.x». www.playframework.com. Получено 2016-10-31.
- ^ Эйх, Брендан. "Гармония моей мечты "
- ^ Эйх, Брендан. "Моя презентация JSConf.US "
- ^ Github. 'начальная фиксация загадочного языка'
- ^ Хакерские новости. Объявление CoffeeScript 1.0.0 опубликовано Джереми Ашкенасом 24 декабря 2010 г.
- ^ Хакерские новости. Оригинальное объявление CoffeeScript опубликовано Джереми Ашкенасом 24 декабря 2009 г.
- ^ coffeescript.org Анонс CoffeeScript 2
- ^ CoffeeScript называет это "сопоставление с образцом ", что является нестандартным использованием этого термина.
- ^ "Официальная страница CoffeeScript". Получено 20 ноября 2013.
- ^ «Проблема неявного определения объема в CoffeeScript». Получено 2018-10-13.
- ^ "Объемы CoffeeScript - это безумие". Получено 2018-10-13.
- ^ CoffeeScript В архиве 2012-04-27 в Wayback Machine. Jashkenas.github.com. Проверено 21 июля 2013.
- ^ Ста Круз, Рико. "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. Получено 2015-11-30.
- ^ Исходный код Atom. github.com. Проверено 22 июля 2015.
дальнейшее чтение
- Ли, Патрик (14 мая 2014 г.). CoffeeScript в действии (Первое изд.). Публикации Мэннинга. п. 432. ISBN 978-1617290626.
- Грозенбах, Джеффри (12 мая 2011 г.). «Знакомьтесь, CoffeeScript» (Первое изд.). PeepCode. Цитировать журнал требует
| журнал =
(помощь) - Бейтс, Марк (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.