Кофескрипт
Парадигма | Мультипарадигмальность : прототипная , функциональная , императивная , скриптовая. |
---|---|
Разработано | Джереми Ашкенас |
Разработчик | Джереми Ашкенас |
Впервые появился | 13 декабря 2009 г |
Стабильная версия | 2.7.0 [1]
/ 24 апреля 2022 г |
Дисциплина набора текста | динамический , неявный |
ТЫ | Кросс-платформенный |
Лицензия | МОЯ лицензия |
Расширения имен файлов | .coffee , .litcoffee [ нужна ссылка ] |
Веб-сайт | кофейный сценарий |
Под влиянием | |
Хаскелл , JavaScript , Перл , [ нужна ссылка ] Питон , [2] Руби , ЯМЛ [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 года Джереми Ашкенас сделал первый коммит CoffeeScript в Git с комментарием «первоначальный коммит загадочного языка». [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 , можно было бы написать:
const mass = 72;
const height = 1.78;
const BMI = mass / height ** 2;
if (18.5 <= BMI && BMI < 25) { alert('You are healthy!') }
В CoffeeScript интервал описывается напрямую:
mass = 72
height = 1.78
BMI = mass / height**2
alert 'You are healthy!' if 18.5 <= BMI < 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] until y is 0
x
The ?
Ключевое слово быстро проверяет, является ли переменная null
или undefined
:
personCheck = ->
if not person? then alert("No person") else alert("Have person")
person = null
personCheck()
person = "Ivan"
personCheck()
Это выведет предупреждение «Нет человека», если переменная null
или undefined
и «Есть человек», если там что-то есть.
Обычный фрагмент JavaScript до es6, использующий библиотеку jQuery :
$(document).ready(function() {
// Initialization code goes here
});
Или даже просто:
$(function() {
// Initialization code goes here
});
В CoffeeScript function
ключевое слово заменяется на ->
символ, а отступы используются вместо фигурных скобок, как в других языках внешних правил, таких как Python и Haskell. Кроме того, круглые скобки обычно можно опустить, используя вместо них уровень отступа для обозначения функции или блока. Таким образом, эквивалент приведенного выше фрагмента в CoffeeScript:
$(document).ready ->
# Initialization code goes here
Или просто:
$ ->
# Initialization code goes here
Интерполяция строк в стиле Ruby включена в CoffeeScript. Строки в двойных кавычках допускают интерполированные значения с использованием #{ ... }, а строки в одинарных кавычках являются буквальными. [14]
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
sentence = "#{ 22 / 7 } is a decent approximation of π"
Любой цикл for можно заменить пониманием списка ; так что для вычисления квадратов положительных нечетных чисел, меньших десяти (т.е. чисел, остаток которых по модулю 2 равен 1), можно сделать:
alert n*n for n in [1..10] when n%2 is 1
В качестве альтернативы есть:
alert n*n for n in [1..10] by 2
Линейный поиск можно реализовать с помощью однострочника, используя ключевое слово When:
names = ["Ivan", "Joanna", "Nikolay", "Mihaela"]
linearSearch = (searchName) -> alert(name) for name in names when name is searchName
The for ... in
синтаксис позволяет перебирать массивы в цикле, в то время как for ... of
синтаксис позволяет перебирать объекты в цикле.
CoffeeScript подвергся критике за необычный охват. правила. [15] [16] В частности, он полностью запрещает затенение переменных , что усложняет понимание кода и подвержен ошибкам в некоторых базовых шаблонах программирования, установленных считается само собой разумеющимся со времен процедурного программирования были определены принципы.
Например, с помощью следующего фрагмента кода в JavaScript
не нужно смотреть за пределы {}
-блокировать, чтобы знать
уверен, что невозможно 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 . Плагин использует JavaScript-движок Rhino , написанный на 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», но сейчас это не так. [22] и их текстовый редактор Atom также был написан на этом языке, с конфигурацией, написанной на CSON («Нотация объектов CoffeeScript»), варианте JSON . [23] [24]
Pixel Game Maker MV использует CoffeeScript как часть своей среды разработки игр. [25]
См. также
[ редактировать ]- Смешанный
- Ним (язык программирования)
- Эмбер Смолток
- Кложур
- Дарт (язык программирования)
- Котлин (язык программирования)
- LiveScript
- Опа (язык программирования)
- Элм (язык программирования)
- Машинопись
- Чистый скрипт
Ссылки
[ редактировать ]- ^ «2.7.0» . 24 апреля 2022 г. Проверено 9 августа 2022 г.
- ^ https://coffeescript.org/ «CoffeeScript заимствует цепные сравнения из Python»
- ^ Хеллер, Мартин (18 октября 2011 г.). «Подними нос от Dart и почувствуй запах CoffeeScript» . Инфомир . Проверено 15 июля 2020 г.
- ^ Алекс Маккоу (январь 2012 г.). Маленькая книга о CoffeeScript . О'Рейли Медиа . ISBN 978-1-4493-2105-5 .
- ^ Джош Пик (13 апреля 2011 г.). «Твит члена основной команды Rails» .
- ^ «АктивыCoffeeScript — 2.5.x» . www.playframework.com . Проверено 31 октября 2016 г.
- ^ Эйх, Брендан. « Гармония моей мечты »
- ^ Эйх, Брендан. " Моя презентация JSConf.US "
- ^ Гитхаб. 'первоначальная фиксация загадочного языка'
- ^ Хакерские новости. Анонс CoffeeScript 1.0.0 , опубликованный Джереми Ашкенасом 24 декабря 2010 г.
- ^ Хакерские новости. Оригинальное объявление CoffeeScript , опубликованное Джереми Ашкенасом 24 декабря 2009 г.
- ^ Coffeescript.org Анонс CoffeeScript 2
- ^ CoffeeScript называет это « сопоставлением с образцом », что является нестандартным использованием этого термина.
- ^ «Официальная страница CoffeeScript» . Проверено 20 ноября 2013 г.
- ^ «Проблема неявной области видимости в CoffeeScript» . Проверено 13 октября 2018 г.
- ^ «Определение возможностей CoffeeScript — это безумие» . 25 июля 2013 года . Проверено 13 октября 2018 г.
- ^ CoffeeScript. Архивировано 27 апреля 2012 г. в Wayback Machine . Jashkenas.github.com. Проверено 21 июля 2013 г.
- ^ Ста Круз, Рико. "js2coffee" . Проверено 11 мая 2014 г.
- ^ «Официальный сайт IcedCoffeeScript» .
- ^ Уилер, Дэн; Махковец, Зига; Варенхорст, Крис (13 сентября 2012 г.). «Dropbox погружается в CoffeeScript» . Проверено 11 мая 2013 г.
- ^ Гольдштейн, Дэвид (13 мая 2020 г.). «Великий переход CoffeeScript на Typescript в 2017 году» . Dropbox.Tech . Проверено 30 июня 2020 г.
- ^ «JavaScript · Руководство по стилю · GitHub» . Гитхаб.com. Архивировано из оригинала 15 августа 2013 г. Проверено 30 ноября 2015 г.
- ^ «Исходный код Atom» . Гитхаб . Проверено 26 июня 2021 г.
- ^ «Базовая настройка» . атома Руководство по летной эксплуатации . Гитхаб . Архивировано из оригинала 29 апреля 2024 г. Проверено 29 апреля 2024 г.
- ^ Каллен, Дэниел. «PIXEL GAME MAKER MV (ПК)» . Игры, центрированные Христом . Проверено 15 января 2021 г.
Дальнейшее чтение
[ редактировать ]- Ли, Патрик (14 мая 2014 г.). CoffeeScript в действии (первое изд.). Публикации Мэннинга . п. 432. ИСБН 978-1617290626 .
- Грозенбах, Джеффри (12 мая 2011 г.). «Знакомьтесь с CoffeeScript» (первое издание). ПипКод .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - Бейтс, Марк (31 мая 2012 г.). Программирование на CoffeeScript (Первое изд.). Аддисон-Уэсли . п. 350. ИСБН 978-0-321-82010-5 .
- Маккоу, Алекс (31 января 2012 г.). Маленькая книга о CoffeeScript (первое изд.). О'Рейли Медиа . п. 62. ИСБН 978-1449321055 .
- Бернэм, Тревор (3 августа 2011 г.). CoffeeScript: ускоренная разработка JavaScript (первое издание). Прагматичная книжная полка . п. 138 . ISBN 978-1934356784 .
Внешние ссылки
[ редактировать ]- Динамические языки программирования
- Языки программирования, созданные в 2009 году.
- Семейство языков программирования JavaScript
- Языки программирования на основе прототипов
- Программное обеспечение, использующее лицензию MIT
- Компиляторы исходного кода
- Языки программирования высокого уровня
- программное обеспечение 2009 года
- Бесплатные программные проекты