Paradigm | Мультипарадигма : основанная на прототипе, функциональная, императивная, сценарии |
---|---|
Разработано | Джереми Ашкенасом |
Разработчик | Джереми Ашкенас |
Впервые появился | 13 декабря 2009 г.; 10 лет назад (13.12.2009) |
Стабильный выпуск | 2.5.1 / 31 января 2020 г.; 8 месяцев назад (2020-01-31) |
OS | Кросс-платформенная |
Лицензия | Лицензия MIT |
Расширения имен файлов | .coffee,.litcoffee |
Веб-сайт | coffeescript. org |
Под влиянием | |
Haskell, JavaScript, Perl, Python, Ruby, YAML | |
Под влиянием | |
MoonScript, LiveScript, JavaScript |
CoffeeScript - это язык программирования, который компилируется в JavaScript. Он добавляет синтаксический сахар, вдохновленный Ruby, Python и Haskell, чтобы улучшить краткость и удобочитаемость JavaScript. Конкретные дополнительные функции включают понимание списка и назначение деструктуризации..
Поддержка CoffeeScript включена в Ruby on Rails версии 3.1 и Play Framework. В 2011 году Брендан Эйх упомянул CoffeeScript как источник, влияющий на его мысли о будущем JavaScript.
13 декабря 2009 г., Джереми Ашкенас сделал первую Git фиксацию CoffeeScript с комментарием: «начальная фиксация загадочного языка». Компилятор был написан на Ruby. 24 декабря он выпустил первый релиз 0.1.0 с тегами и документами. 21 февраля 2010 года он выпустил версию 0.5, которая заменила компилятор Ruby на саморазмещающуюся версию на чистом CoffeeScript. К тому времени проект привлек несколько других участников на GitHub и получал более 300 обращений к страницам в день.
24 декабря 2010 года Ашкенас объявил о выпуске стабильной версии 1.0.0 для Hacker News, сайта, на котором проект был анонсирован впервые.
На 18 сентября 2017 года была представлена версия 2.0.0, которая «направлена на то, чтобы перенести CoffeeScript в современную эру JavaScript, ликвидируя пробелы в совместимости с JavaScript, сохраняя при этом чистый синтаксис, который является отличительной чертой CoffeeScript».
Практически все является выражением в CoffeeScript, например, if
, switch
и для
выражений (которые не имеют возвращаемого значения в JavaScript) возвращают значение. Как и в Perl, эти управляющие операторы также имеют постфиксные версии; например, if
также может быть записано в форме последующего условия if
.
Многие ненужные скобки и фигурные скобки можно опустить; например, блоки кода могут быть обозначены отступом вместо фигурных скобок, вызовы функций неявны, а литералы объектов часто обнаруживаются автоматически.
Чтобы вычислить индекс массы тела, можно сделать (здесь, в JavaScript ):
const mass = 72 const height = 1.78 const BMI = масса / высота ** 2, если (18,5 < BMI BMI < 25) { alert('You are healthy!') }
В CoffeeScript интервал описывается напрямую:
масса = 72 рост = 1,78 ИМТ = масса / рост ** 2 предупреждение «Вы здоровы!», если 18,5 < BMI < 25
Для вычисления наибольший общий делитель двух целых чисел с алгоритмом Евклида, в JavaScript обычно требуется цикл while:
gcd = (x, y) =>{do {z = x % yx = yy = z} while (y! == 0) return x}
Тогда как в CoffeeScript можно использовать до
и вместо этого деструктурирующее присваивание:
gcd = (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] by 2
A линейный поиск может быть реализован с однострочным поиском с использованием ключевого слова when:
names = ["Иван", "Иоанна", "Николай", "Михаэла"] linearSearch = (searchName) ->alert (name) для имени в именах, если name - searchName
Синтаксис for... in
позволяет перебирать массивы, в то время как for... of
синтаксис позволяет перебирать объекты.
Ключевое слово ?
быстро проверяет, имеет ли переменная значение null
или undefined
:
personCheck = ->, если не person? затем alert ("Нет человека") else alert ("Have person") person = null personCheck () person = "Ivan" personCheck ()
Это предупредит "Нет человека", если переменная null
или undefined
и «Имейте человека», если там что-то есть.
Стандартный фрагмент кода JavaScript, использующий библиотеку jQuery :
$ (document).ready (function () {// Здесь идет код инициализации})
Или даже просто :
$ (function () {// Здесь идет код инициализации})
В CoffeeScript ключевое слово function
заменяется символом ->
, а отступ равен используется вместо фигурных скобок, как в других языках off-side rule, таких как Python и Haskell. Кроме того, круглые скобки обычно можно опустить, используя вместо них уровень отступа для обозначения функции или блока. Таким образом, CoffeeScript-эквивалент приведенного выше фрагмента:
$ (document).ready -># Здесь идет код инициализации
Или просто:
$ -># Здесь идет код инициализации
в стиле Ruby строковая интерполяция включена в CoffeeScript. Строки в двойных кавычках допускают интерполированные значения с использованием # {...}, а строки в одинарных кавычках являются буквальными.
author = "Wittgenstein" quote = "Изображение - это факт. - Предложение # {author}" = "# {22/7} - хорошее приближение к π"
CoffeeScript подвергся критике за необычные правила области видимости. В частности, он полностью запрещает затенение переменных, что делает рассуждения о коде более сложными и подверженными ошибкам в некоторых основных шаблонах программирования, установленных и принимаемых как должное, поскольку были определены принципы процедурного программирования.
Например, со следующим фрагментом кода в JavaScript не нужно смотреть за пределы {}
-блока, чтобы точно знать, что нет возможной переменной foo
в внешнюю область действия можно случайно переопределить:
//... function baz () {var foo = "bar" console.log (`foo = $ {foo}`)} //...}
В CoffeeScript нет способа определить, ограничена ли область действия переменной блоком или нет, не глядя за пределы блока.
Компилятор CoffeeScript был самостоятельным хостингом с версии 0.5 и доступен как утилита Node.js ; однако компилятор ядра не полагается на Node.js и может быть запущен в любой среде JavaScript. Альтернативой утилите Node.js является плагин Coffee Maven, плагин для системы сборки Apache Maven. Плагин использует движок JavaScript Rhino, написанный на Java.
. На официальном сайте CoffeeScript.org есть кнопка «Попробовать CoffeeScript» в строке меню; щелчок по нему открывает модальное окно, в котором пользователи могут ввести CoffeeScript, просмотреть выходные данные JavaScript и запустить его прямо в браузере. Сайт js2coffee обеспечивает двунаправленный перевод.
.coffee.md
или .litcoffee
. Это позволяет писать исходный код CoffeeScript в Markdown. Компилятор будет рассматривать любые блоки с отступом (способ обозначения исходного кода в Markdown) как код, а остальные игнорировать как комментарии.Iced CoffeeScript - это расширенный набор CoffeeScript, который добавляет два новых ключевых слова: ждать
и откладывать
. Эти дополнения упрощают асинхронный поток управления, делая код более похожим на язык процедурного программирования, устраняя цепочку обратных вызовов. Его можно использовать на стороне сервера и в браузере.
13 сентября 2012 года Dropbox объявил, что их база кода на стороне браузера была переписана с JavaScript на CoffeeScript, однако в 2017 году он был перенесен на TypeScript. В руководстве по внутреннему стилю
GitHub однажды говорилось: «Напишите новый JS на CoffeeScript» и хотя этого больше нет, все советы в руководстве по стилю относятся к тому, как писать хороший CoffeeScript, и они также написаны на этом языке.
| journal =
()