stringtranslate.com

CoffeeScript

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».

Синтаксис

Почти все является выражением в CoffeeScript, например, if, switchа forвыражения (которые не имеют возвращаемого значения в JavaScript) возвращают значение. Как и в Perl и Ruby, эти управляющие операторы также имеют постфиксные версии; например, ifтакже может быть записано в consequent if conditionформе.

Многие ненужные скобки и фигурные скобки можно опустить; например, блоки кода можно обозначить отступами вместо фигурных скобок, вызовы функций будут неявными, а литералы объектов часто будут определяться автоматически.

Чтобы вычислить индекс массы тела в JavaScript , можно написать:

пусть масса = 72 ; пусть рост = 1,78 ; пусть ИМТ = масса / рост ** 2 ; если ( 18,5 <= ИМТ && ИМТ < 25 ) alert ( 'Вы здоровы!' );                   

С помощью CoffeeScript интервал описывается напрямую:

масса = 72 рост = 1,78 ИМТ = масса / рост ** 2 оповещение «Вы здоровы!», если 18,5 <= ИМТ < 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 ] пока y не станет равным 0 x            

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

personCheck = -> если не человек ? тогда alert ( "Нет человека" ) else alert ( "Есть человек" ) person = null personCheck () person = "Иван" personCheck ()             

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

Обычный фрагмент JavaScript до ES6 , использующий библиотеку jQuery :

$ ( document ) .ready ( function () { // Здесь находится код инициализации });  

Или даже просто:

$ ( function () { // Здесь находится код инициализации });  

В CoffeeScript functionключевое слово заменяется символом ->, а отступ используется вместо фигурных скобок, как в других языках с правилами off-side, таких как Python и Haskell. Кроме того, скобки обычно можно опустить, используя вместо этого уровень отступа для обозначения функции или блока. Таким образом, эквивалент фрагмента выше в CoffeeScript выглядит так:

$ ( document ). ready -> # Код инициализации находится здесь  

Или просто:

$ -> # Здесь находится код инициализации  

Интерполяция строк в стиле Ruby включена в CoffeeScript. Строки в двойных кавычках допускают интерполированные значения, используя #{ ... }, а строки в одинарных кавычках являются литеральными. [14]

автор = "Витгенштейн" цитата = "Картина — это факт. -- #{ автор } "      предложение = " #{ 22 / 7 } является хорошим приближением числа π"      

Любой цикл for можно заменить списковым включением ; так, чтобы вычислить квадраты положительных нечетных чисел, меньших десяти (т.е. чисел, остаток которых по модулю 2 равен 1), можно сделать следующее:

alert n * n для n в [ 1 .. 10 ] когда n % 2 равно 1         

В качестве альтернативы есть:

оповещение n * n для n в [ 1 .. 10 ] по 2       

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

names = [ "Иван" , "Джоанна" , "Николай" , "Михаэла" ] linearSearch = (searchName) -> alert ( name ) для имени в именах , когда имя - searchName                

Синтаксис for ... inпозволяет выполнять цикл по массивам, а for ... ofсинтаксис позволяет выполнять цикл по объектам.

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

Например, с помощью следующего фрагмента кода на JavaScript не нужно выходить за пределы блока, {}чтобы точно знать, что никакая возможная fooпеременная во внешней области видимости не может быть случайно переопределена:

 // ... функция baz () { var foo = " bar" ; console.log ( `foo = ${ foo } ` ); } // ... }          

В CoffeeScript нет способа определить, ограничена ли область действия переменной блоком или нет, не заглянув за пределы блока.

Разработка и распространение

Компилятор CoffeeScript размещается самостоятельно с версии 0.5 и доступен как утилита Node.js ; однако основной компилятор не зависит от Node.js и может быть запущен в любой среде JavaScript . [17] Одной из альтернатив утилите Node.js является Coffee Maven Plugin, плагин для системы сборки Apache Maven . Плагин использует движок Rhino JavaScript, написанный на Java . [ требуется цитата ]

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

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

Расширения

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

Принятие

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

Внутреннее руководство по стилю GitHub когда-то гласило: «Пишите новый JS на CoffeeScript», хотя теперь это уже не так, [22] и их текстовый редактор Atom также был написан на этом языке, а его конфигурация была написана на CSON («CoffeeScript Object Notation»), варианте JSON . [23] [24]

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

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

Ссылки

  1. ^ "2.7.0". 24 апреля 2022 г. Получено 9 августа 2022 г.
  2. ^ https://coffeescript.org/ «CoffeeScript заимствует цепочечные сравнения из Python»
  3. ^ Хеллер, Мартин (18 октября 2011 г.). «Отверните нос от Dart и почувствуйте запах CoffeeScript». InfoWorld . Получено 15 июля 2020 г.
  4. ^ Алекс Маккоу (январь 2012 г.). Маленькая книга о CoffeeScript . O'Reilly Media . ISBN 978-1-4493-2105-5.
  5. Джош Пик (13 апреля 2011 г.). «Твит члена основной команды Rails».
  6. ^ "AssetsCoffeeScript - 2.5.x". www.playframework.com . Получено 2016-10-31 .
  7. ^ Эйх, Брендан. «Гармония моих снов»
  8. ^ Эйх, Брендан. "Моя презентация JSConf.US"
  9. ^ Github. «Первоначальный коммит таинственного языка»
  10. ^ Hacker News. Анонс CoffeeScript 1.0.0, опубликованный Джереми Ашкенасом 24 декабря 2010 г.
  11. ^ Hacker News. Оригинальное объявление CoffeeScript, опубликованное Джереми Ашкенасом 24 декабря 2009 г.
  12. ^ coffeescript.org Анонс CoffeeScript 2
  13. ^ CoffeeScript называет это « сопоставлением с образцом », что является нестандартным использованием этого термина.
  14. ^ "Официальная страница CoffeeScript" . Получено 20 ноября 2013 г. .
  15. ^ "Проблема с неявной областью действия в CoffeeScript" . Получено 13 октября 2018 г.
  16. ^ «Ограничение возможностей CoffeeScript — это безумие». 25 июля 2013 г. Получено 13 октября 2018 г.
  17. ^ CoffeeScript Архивировано 27.04.2012 на Wayback Machine . Jashkenas.github.com. Получено 21.07.2013.
  18. ^ Sta Cruz, Rico. "js2coffee" . Получено 11 мая 2014 г. .
  19. ^ "Официальный сайт IcedCoffeeScript".
  20. ^ Уилер, Дэн; Махковец, Зига; Варенхорст, Крис (13 сентября 2012 г.). «Dropbox погружается в CoffeeScript» . Получено 11 мая 2013 г.
  21. ^ Голдштейн, Дэвид (13 мая 2020 г.). «Великий переход с CoffeeScript на TypeScript 2017 года». Dropbox.Tech . Получено 30 июня 2020 г. .
  22. ^ "JavaScript · Styleguide · GitHub". Github.com. Архивировано из оригинала 2013-08-15 . Получено 2015-11-30 .
  23. ^ "Исходный код Atom". GitHub . Получено 2021-06-26 .
  24. ^ "Basic Customization". Atom Flight Manual . GitHub . Архивировано из оригинала 2024-04-29 . Получено 29 апреля 2024 .
  25. ^ Каллен, Дэниел. "PIXEL GAME MAKER MV (PC)". Christ Centered Gaming . Получено 15 января 2021 г.

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

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