CoffeeScript - CoffeeScript

CoffeeScript
CoffeeScript-logo.png
Парадигма Мультипарадигма : на основе прототипов , функциональная , императивная , сценарии
Разработано Джереми Ашкенас
Разработчик Джереми Ашкенас
Впервые появился 13 декабря 2009 г . ; 11 лет назад ( 2009-12-13 )
Стабильный выпуск
2.5.1  Отредактируйте это в Викиданных / 31 января 2020 г . ; 20 месяцев назад ( 31 января 2020 г. )
Печатная дисциплина динамический , неявный
Операционные системы Кроссплатформенность
Лицензия Лицензия 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 года Джереми Ашкенас сделал первую фиксацию CoffeeScript с помощью Git с комментарием: «начальная фиксация загадочного языка». Компилятор был написан на 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».

Синтаксис

Например if, почти все является выражением в CoffeeScript, switchа forвыражения (которые не имеют возвращаемого значения в JavaScript) возвращают значение. Как и в Perl , эти управляющие операторы также имеют постфиксные версии; например, 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 один обычно нуждается в то время как цикл:

gcd = (x, y) => {
  do {
    [x, y] = [y, x%y];
  } while (y !== 0)
  return x
}

В то время как в CoffeeScript untilвместо этого можно использовать и деструктурирующее присваивание:

gcd = (x, y) ->
  [x, y] = [y, x%y] until y is 0
  x

Любой цикл 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

Линейный поиск может быть реализован с помощью однострочника используя при ключевом слове:

names = ["Ivan", "Joanna", "Nikolay", "Mihaela"]
linearSearch = (searchName) -> alert(name) for name in names when name is searchName

for ... inСинтаксис позволяет обработке массивов , а for ... ofсинтаксис позволяет перекручивание над объектами.

В ?ключевых слов проверяет быстро , является ли переменная nullили undefined :

personCheck = ->
  if not person? then alert("No person") else alert("Have person")
person = null
personCheck()
person = "Ivan"
personCheck()

Это предупредит «Нет человека», если переменная равна nullили, undefinedи «Есть человек», если там что-то есть.

Типичный фрагмент кода JavaScript, использующий библиотеку 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. Строки в двойных кавычках допускают интерполированные значения с использованием # {...}, а строки в одинарных кавычках являются буквальными.

author = "Wittgenstein"
quote  = "A picture is a fact. -- #{ author }"

sentence = "#{ 22 / 7 } is a decent approximation of π"

CoffeeScript критиковали за необычные правила области видимости. В частности, он полностью запрещает скрытие переменных, что делает рассуждения о коде более сложными и подверженными ошибкам в некоторых базовых шаблонах программирования, установленных и принимаемых как должное с тех пор, как были определены принципы процедурного программирования .

Например, со следующим фрагментом кода в JavaScript не нужно смотреть за пределы {}-block, чтобы точно знать, что никакая возможная 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 . Плагин использует движок Rhino JavaScript, написанный на Java .

На официальном сайте CoffeeScript.org есть кнопка «Попробовать CoffeeScript» в строке меню; щелчок по нему открывает модальное окно, в котором пользователи могут ввести CoffeeScript, просмотреть вывод JavaScript и запустить его прямо в браузере. Сайт js2coffee обеспечивает двусторонний перевод.

Последние добавления

  • Карты исходного кода позволяют пользователям напрямую отлаживать свой код CoffeeScript, поддерживая трассировку CoffeeScript при ошибках времени выполнения.
  • CoffeeScript поддерживает форму грамотного программирования с использованием расширения файла .coffee.mdили .litcoffee. Это позволяет писать исходный код CoffeeScript на Markdown . Компилятор будет рассматривать любые блоки с отступом (способ обозначения исходного кода в Markdown) как код, а остальные игнорировать как комментарии.

Расширения

Iced CoffeeScript - это расширенный набор CoffeeScript, который добавляет два новых ключевых слова: awaitи defer. Эти дополнения упрощают асинхронный поток управления, делая код более похожим на процедурный язык программирования , устраняя цепочку обратных вызовов. Его можно использовать как на стороне сервера, так и в браузере.

Принятие

13 сентября 2012 года Dropbox объявил, что их кодовая база браузера была переписана с JavaScript на CoffeeScript, однако в 2017 году она была переведена на TypeScript .

Во внутреннем руководстве по стилю GitHub однажды было сказано: «Напишите новый JS на CoffeeScript», и, хотя этого больше нет, все советы в руководстве по стилю ссылаются на то, как писать хороший CoffeeScript, и их текстовый редактор Atom также был написан на этом языке.

Pixel Game Maker MV использует CoffeeScript как часть среды разработки игр.

Смотрите также

использованная литература

дальнейшее чтение

внешние ссылки