Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

CoffeeScript. Второе дыхание JavaScript

Покупка
Артикул: 448685.04.99
Доступ онлайн
319 ₽
В корзину
Если вы уже умеете писать на JavaScript, на CoffeeScript вы сможете делать это лучше. А поскольку программный код на CoffeeScript «компилируется» в программный код на JavaScript, он легко впишется практически в любое веб-окружение. В книге автор рассказывает веб-разработчикам, почему язык CoffeeScript так удобен и как он позволяет избежать проблем, часто способствующих появлению ошибок в программном коде на JavaScript и усложняющих его сопровождение. Он познакомит вас со всеми особенностями и приемами, которые необходимо знать, чтобы писать качественный программный код на CoffeeScript, и покажет, как использовать преимущества еще более надежного набора инструментов, входящих в состав языка CoffeeScript. Издание предназначено в первую очередь веб-разработчикам, использующим JavaScript, а также всем тем, кто хочет писать качественный и понятный код.
Бейтс, М. CoffeeScript. Второе дыхание JavaScript : практическое руководство / М. Бейтс ; пер. с англ. А. Н. Киселёва. - 2-е изд. - Москва : ДМК Пресс, 2023. - 311 с. - ISBN 978-5-89818-581-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/2107944 (дата обращения: 10.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
CoffeeScript.  
Второе дыхание JavaScript

Марк Бейтс
Programming 
in CoffeeScript

Mark Bates
CoffeeScript.  
Второе дыхание JavaScript

Марк Бейтс

Москва, 2023

2-е издание, электронное
УДК 004.738.5:004.45CoffeeScript
ББК 32.973.202-018.2
Б41

Б41
Бейтс, Марк.
CoffeeScript. Второе дыхание JavaScript / М. Бейтс ; пер. с англ. А. Н. Ки-
селёва. — 2-е изд., эл. — 1 файл pdf : 311 с. — Москва : ДМК Пресс, 2023. — 
Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; 
экран 10". — Текст : электронный.
ISBN 978-5-89818-581-7

Если вы уже умеете писать на JavaScript, на CoffeeScript вы сможете делать это 
лучше. А поскольку программный код на CoffeeScript «компилируется» в программный 
код на JavaScript, он легко впишется практически в любое веб-окружение. В книге 
автор рассказывает веб-разработчикам, почему язык CoffeeScript так удобен и как 
он позволяет избежать проблем, часто способствующих появлению ошибок в программном 
коде на JavaScript и усложняющих его сопровождение. Он познакомит 
вас со всеми особенностями и приемами, которые необходимо знать, чтобы писать 
качественный программный код на CoffeeScript, и покажет, как использовать преимущества 
еще более надежного набора инструментов, входящих в состав языка 
CoffeeScript.
Издание предназначено в первую очередь веб-разработчикам, использующим 
JavaScript, а также всем тем, кто хочет писать качественный и понятный код.

УДК 004.738.5:004.45CoffeeScript 
ББК 32.973.202-018.2

Электронное издание на основе печатного издания: CoffeeScript. Второе дыхание JavaScript / 
М. Бейтс ; пер. с англ. А. Н. Киселёва. — Москва : ДМК Пресс, 2016. — 310 с. — ISBN 978-5-
97060-240-9. — Текст : непосредственный.

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

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами 
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.


ISBN 978-5-89818-581-7
© by Pearson Education, Inc.
© Оформление, издание, ДМК Пресс, 2016
Содержание

Благодарности ................................................. 12

Об авторе ........................................................ 15

Предисловие ................................................... 16

Что такое CoffeeScript? ....................................................... 19

Кому адресована эта книга? ............................................... 21

Как читать эту книгу ............................................................ 22

Структура книги .................................................................. 24
Часть I: Основы CoffeeScript ........................................... 24
Часть II: Практическое применение CoffeeScript ............. 25

Установка CoffeeScript ........................................................ 26

Как запускать примеры ....................................................... 27

Примечания ........................................................................ 27

Часть I. Основы CoffeeScript ............................... 29

1. Введение ..................................................... 30

Интерактивная среда CoffeeScript ...................................... 30

Компиляция в браузере ...................................................... 33

Предостережение ............................................................... 35

Компиляция в командной строке ........................................ 35
Флаг --compile ............................................................... 36
Содержание

Интерфейс командной строки CoffeeScript ......................... 36
Флаг --output .................................................................. 38
Флаг --bare..................................................................... 38
Флаг --print .................................................................... 39
Флаг --watch .................................................................. 40
Выполнение файлов CoffeeScript ................................... 41
Прочие флаги ................................................................. 41

В заключение ...................................................................... 41

Примечания ........................................................................ 42

2. Основы ........................................................ 43

Синтаксис ........................................................................... 43

Значимые пробелы ............................................................. 44

Ключевое слово function ..................................................... 46

Круглые скобки ................................................................... 46

Переменные и области видимости...................................... 48
Видимость переменных в JavaScript ............................... 48
Видимость переменных в CoffeeScript............................ 49
Анонимная функция-обертка .......................................... 50

Интерполяция ..................................................................... 54
Интерполяция строк ....................................................... 54
Интерполируемые строки .............................................. 55
Строковые литералы ...................................................... 57
Встроенные документы .................................................. 59
Комментарии ................................................................. 60
Встроенные комментарии .............................................. 61
Блочные комментарии ................................................... 61

Расширенный синтаксис регулярных выражений ................ 62

В заключение ...................................................................... 63

Примечания ........................................................................ 63
Содержание

3. Управляющие конструкции  ............................ 64

Операторы и псевдонимы ................................................... 64
Арифметические операторы .......................................... 65
Присваивание ................................................................ 66
Сравнение ..................................................................... 69
Строки ........................................................................... 72
Оператор проверки существования ............................... 72
Псевдонимы ................................................................... 75
Псевдонимы is и isnt ....................................................... 76
Псевдоним not ............................................................... 76
Псевдонимы and и or ...................................................... 78
Псевдонимы логических значений ................................. 78
Псевдоним @ ................................................................. 80

Условные инструкции if/unless ............................................ 81
Инструкция if .................................................................. 81
Инструкция if/else .......................................................... 82
Инструкция if/else if ........................................................ 85
Инструкция unless .......................................................... 87
Встроенные условные инструкции ................................. 88

Инструкции switch/when ..................................................... 89

В заключение ...................................................................... 91

Примечания ........................................................................ 92

4. Функции и аргументы ..................................... 93

Основы функций ................................................................. 95

Аргументы .......................................................................... 98

Аргументы со значениями по умолчанию ............................ 99

Групповые аргументы... .................................................... 102

В заключение .................................................................... 106

Примечания ...................................................................... 106
Содержание

5. Коллекции и итерации ................................. 107

Массивы ........................................................................... 107
Проверка на вхождение ................................................ 109
Присваивание с перестановкой ................................... 110
Множественное, или реструктурирующее  
присваивание .............................................................. 111
Диапазоны ................................................................... 115
Срезы массивов ........................................................... 117
Замена значений в массиве ......................................... 119
Вставка значений ......................................................... 120

Объекты/хеши .................................................................. 121
Получение и изменение атрибутов ............................... 125
Реструктурирующее присваивание .............................. 127

Циклы и итерации ............................................................. 128
Итерации по элементам массивов ............................... 129
Ключевое слово by ....................................................... 130
Ключевое слово when ................................................... 131
Итерации по атрибутам объектов ................................. 132
Ключевое слово by ....................................................... 133
Ключевое слово when ................................................... 133
Ключевое слово own ..................................................... 134
Цикл while ..................................................................... 137
Цикл until ...................................................................... 138
Генераторы .................................................................. 139
Ключевое слово do ....................................................... 142

В заключение .................................................................... 144

Примечания ...................................................................... 145

6. Классы ...................................................... 146

Определение классов ....................................................... 146

Определение функций ...................................................... 147

Функция constructor .......................................................... 148

Область видимости в классах ........................................... 150
Содержание

Наследование классов ...................................................... 159

Функции класса ................................................................ 166

Функции прототипа........................................................... 170

Привязка (-> и =>) ............................................................ 171

В заключение .................................................................... 177

Примечания ...................................................................... 178

Часть II: Практическое применение CoffeeScript .... 179

Примечания ...................................................................... 180

7. Инструмент сборки Cake и файлы  
сборки Cakefile ............................................... 181

Вступление ....................................................................... 181

Создание заданий для Cake .............................................. 182

Выполнение заданий ........................................................ 183

Использование параметров .............................................. 183

Вызов других заданий ....................................................... 187

В заключение .................................................................... 189

Примечания ...................................................................... 190

8. Тестирование с помощью Jasmine .................. 191

Установка Jasmine ............................................................ 192

Настройка Jasmine ............................................................ 192

Введение в Jasmine .......................................................... 195

Модульное тестирование .................................................. 197

До и после ........................................................................ 201

Собственные методы сопоставления ................................ 207

В заключение .................................................................... 210

Примечания ...................................................................... 212
Содержание

9. Введение в Node.js ...................................... 213

Что такое Node.js? ............................................................ 213

Установка Node ................................................................. 214

Введение .......................................................................... 215

Потоковые ответы ............................................................. 218

Создание сервера CoffeeScript ......................................... 220

Опробование сервера ...................................................... 233

В заключение .................................................................... 235

Примечания ...................................................................... 235

10. Пример: список задач, часть 1 (серверная) .... 236

Установка и настройка фреймворка Express ..................... 237

Настройка MongoDB с помощью Mongoose ...................... 242

Создание Todo API ............................................................ 245

Выполнение запросов с помощью Mongoose .................... 247
Извлечение всех задач ................................................. 247
Создание новых задач .................................................. 249
Получение, изменение и удаление задачи .................... 251
Реорганизация контроллера ........................................ 253

В заключение .................................................................... 258

Примечания ...................................................................... 258

11. Пример: список задач, часть 2  
(клиент на основе jQuery) ................................. 259

Подготовка HTML с помощью Twitter Bootstrap .................. 259

Организация взаимодействий с помощью jQuery .............. 263

Добавление формы создания новой задачи ...................... 264
Отображение списка задач с помощью  
шаблонов Underscore.js ................................................ 267

Вывод списка имеющихся задач ....................................... 271
Содержание

Изменение задач .............................................................. 272

Удаление задач ................................................................. 276

В заключение .................................................................... 277

Примечания ...................................................................... 278

12. Пример: список задач, часть 3  
(клиент на основе Backbone.js) ......................... 279

Что такое Backbone.js? ..................................................... 279
Подготовка ................................................................... 280

Настройка фреймворка Backbone.js ................................. 281

Создание модели Todo и коллекции ее экземпляров ........ 284

Вывод списка задач с помощью представления ................ 287

Создание новых задач ...................................................... 290

Представление для отображения отдельной задачи ......... 294
Изменение и проверка моделей в представлениях....... 296
Проверка ..................................................................... 298

Удаление моделей из представлений ............................... 299

В заключение .................................................................... 301

Примечания ...................................................................... 302

Предметный указатель .................................... 303 
Благодарности1

Я говорил это в своей первой книге, и повторю здесь: труд писателя 
невероятно тяжел! Поверьте, никто не скажет, что это не так. Если 
же кто-то попробует опровергнуть мои слова, он либо лгун, либо 
Стивен Кинг (Stephen King). К счастью для меня, я нахожусь где-
то посередине.
Работа над книгой, с одной стороны, это труд одного, независимого 
человека, а с другой – труд целой команды. Уложив детей спать, 
я устремляюсь в свой офис, вскрываю несколько банок Гиннесса 
(Guiness), завожу музыку и за работу, в уединении, поздно ночью. 
Закончив главу, я отсылаю ее своему редактору, а он рассылает ее 
множеству людей, которые берут мою писанину и улучшают ее. 
Улучшениями могут быть простые исправления грамматических и 
орфографических ошибок или что-то более сложное, например, помощь 
в улучшении организации книги или рекомендации по улучшению 
примеров программного кода, с целью сделать их более понятными. 
То есть, с одной стороны книга может писаться в одиночку, 
в темной комнате, но конечный продукт является результатом 
упорного труда множества людей.
В этом разделе книги я имею возможность сказать спасибо всем, 
кто помогал создавать, оформлять или как-то иначе обеспечивать 
высочайшее качество книги, которую вы сейчас держите в руках 
(или загрузили из Интернета). Без дальнейших обиняков я хочу 
выразить свои благодарности в стиле лауреата кинопремии Оскара: 
знайте, я уверен, что кого-то наверняка пропущу, о чем невероятно 
сожалею.

1  Многие в моем издательстве считали, что мой раздел с выражением благодарности, 
а также другие части этой книги содержали слишком рискованные 
шутки, поэтому текст оригинала был исправлен до того, что вы 
видите перед собой. Я приношу свои извинения, если что-то из написанного 
мной оскорбило вас, это не было моей целью. Мне уже говорили, 
что мое чувство юмора понятно далеко не всем. Если вы ничего не имеете 
против неприличных шуток, следуйте за мной в Твиттере (учетная запись: 
@markbates).

Рейчел (Rachel), Дилан (Dylan) и Лео (Leo): я живу для вас
Прежде всего я хочу поблагодарить мою красавицу жену Рейчел 
(Rachel). Рейчел – одна из самых участливых и сильных людей, когда-
либо встречавшихся мне. Каждую ночь я ложусь с ней в постель, 
и каждое утро я радуюсь, просыпаясь рядом с ней. Мне доставляет 
удовольствие заглядывать в ее глаза и видеть там безграничную любовь. 
Она поддерживает меня, когда я пишу книги, поддерживала, 
когда я открывал свое дело, и делает все, чтобы моя жизнь была 
счастливее. Она дала мне двух красавцев сыновей, а я взамен даю 
ей скабрезные шутки и мои использованные сотовые телефоны. Я 
определенно отхватил самый лучший кусок в этой сделке, называемой 
браком, за что бесконечно благодарен ей.
Далее, я хочу поблагодарить моих сыновей, Дилана (Dylan) и 
Лео (Leo). Даже при том, что ни один из них не принимал прямого 
участия в создании книги, они придают ценность моей жизни, наполняют 
ее энергией и эмоциями, которые могут дать только дети. 
Я люблю вас, мальчики, очень-очень.
Прежде чем перейти от моей семьи к другим людям, я хотел бы 
сказать спасибо моим родителям (особенно тебе, Мама!) и всем 
остальным членам моей семьи за то, что всегда были рядом и одновременно 
поддерживали меня и возвращали к действительности. Я 
люблю вас всех.
Далее я хочу поблагодарить Дебру Вильямс Коли (Debra Wil-
liams Cauley). Дебра была моим редактором, наставником и психиатром, 
когда я работал над первой книгой «Distributed Programming 
with Ruby». Я могу только пожелать удачи другим авторам работать 
с таким же хорошим редактором, как Дебра. Она обладает по-
настоящему ангельским терпением. 
Надеюсь, если когда-нибудь мне доведется писать еще одну книгу, 
Дебра окажется рядом. Я не могу представить себе процесс создания 
книги без ее участия. Спасибо тебе, Дебра.
В создании технической литературы очень важную роль играют 
технические рецензенты. Работа технического рецензента заключается 
в том, чтобы читать главы и критиковать их с технической точки 
зрения, а также постоянно отвечать на вопрос: «Имеет ли смысл 
рассказывать об этом здесь?». Эти рецензенты выступают в роли 
ваших читателей. Они технически подкованы и знают свой предмет. 
Поэтому их отзывы имеют огромное значение. С этой книгой 
работало несколько технических рецензентов. Но особенно я хотел 
бы отметить двоих из них – Стюарта Гарнера (Stuart Garner) и Дена 
Пикетта (Dan Pickett). При работе над этой книгой, Стюарт и 

Благодарности
Благодарности

Ден не ограничились лишь служебным долгом и не боялись прямо 
высказывать свое мнение, когда я делал или говорил какие-нибудь 
глупости. Они откликались на мои истеричные телефонные звонки 
и электронные письма в любое время дня и ночи и давали бесценные 
советы. Если бы я не хотел сам получить все эти суммы гонораров, 
проставленные в чеках, я не смог бы устоять перед соблазном включить 
в чеки и их фамилии. (Не волнуйтесь, их труд не остался неоплаченным. 
Каждый из них получил купон на один бесплатный час 
времени «Марка».) Спасибо вам, Ден и Стюарт, и всем остальным 
техническим рецензентам, за ваш кропотливый труд.
В эту книгу вложен труд многих людей. Кто-то занимался оформлением 
обложки, кто-то алфавитным указателем, кто-то создавал 
язык (CoffeeScript), и еще множество людей, так или иначе вовлеченных 
в процесс. Ниже приводится список некоторых из них (о 
ком я знаю) без какого-то определенного порядка: Джереми Аш-
кенас (Jeremey Ashkenas), Тревор Барнхам (Trevor Burnham), Ден 
Фишман (Dan Fishman), Крис Зан (Chris Zahn), Грегг Поллак 
(Gregg Pollack), Гари Адайр (Gary Adair), Сандра Шредер (Sandra 
Schroeder), Оби Фернандес (Obie Fernandez), Кристи Харт (Kristy 
Hart), Энди Бестер (Andy Beaster), Барбара Хача (Barbara Hacha), 
Тим Райт (Tim Wright), Дебби Вильямс (Debbie Williams), Брайен 
Франс (Brian France), Ванесса Эванс (Vanessa Evans), Ден Шерф 
(Dan Scherf), Гари Адайр (Gary Adair), Нони Ратклифф (Nonie Rat-
cliff) и Ким Бодигреймер (Kim Boedigheimer).
Я также хотел бы сказать спасибо всем, с кем встречался, пока 
работал над книгой, и кто выслушивал мою бесконечную болтовню 
об этом. Я знаю, многим это совсем не интересно, но, черт возьми, 
я обожаю звук моего голоса. Спасибо всем вам, что не врезали мне 
за мою болтливость, хотя я это, возможно, и заслуживаю.
Наконец, я хотел бы поблагодарить вас, мой читатель. Спасибо, 
что приобрели эту книгу и помогли поддержать всех, кто, как и я 
сам, по-настоящему хотят помочь своим собратьям разработчикам, 
поделившись своими знаниями с остальным миром. Именно для вас 
я вложил массу времени и сил в эту книгу. Я надеюсь, что когда вы 
перевернете последнюю страницу, вы будете лучше понимать язык 
CoffeeScript, и как он может повлиять на вашу работу. Удачи!
Об авторе

Марк Бейтс (Mark Bates) является основателем и главным архитектором 
консалтинговой компании Meta42 Labs со штаб-квартирой 
в Бостоне. Марк проводит дни, занимаясь разработкой новых приложений 
для своих клиентов и консультируя их. После работы он 
пишет книги, воспитывает детей, а иногда созывает свой ансамбль 
и «пытается сделать это».
Марк занимается разработкой веб-приложений, в том или ином 
виде, начиная с 1996 года. Свою карьеру он начинал, как разработчик 
пользовательского интерфейса, используя HTML и JavaScript, 
а затем переключился на разработку более сложного программного 
обеспечения на языках Java и Ruby. В настоящее время Марк тратит 
свое время, изменяя Ruby со своей новой возлюбленной – Coffee-
Script.
Всегда желая поделиться своими знаниями, а точнее, просто услышать 
звук своего голоса, Марк неоднократно выступал на широко 
известных конференциях, таких как RubyConf, RailsConf, и jQuery-
Conf. Кроме того, он преподавал на курсах изучения Ruby и Ruby on 
Rails. В 2009 году издательством Addison-Wesley была опубликована 
первая книга Марка (и самое замечательное, что не последняя!) 
«Distributed Programming with Ruby».
Марк живет в пригороде Бостона со своей супругой Рейчел и 
двумя сыновьями, Диланом и Лео. Марка можно найти в Веб, по 
адресам: http://www.markbates.com, http://twitter.com/markbates и 
http://github.com/markbates.
Предисловие

Моя профессиональная карьера разработчика началась в 1999 году, 
когда я получил первую зарплату как разработчик. (Я не считаю 
несколько лет, когда я просто получал удовольствие, играя с Веб.) 
В 1999 году Всемирная паутина была жутким местом. HTML-файлы 
были перегружены тегами font и table. Каскадные таблицы стилей 
CSS только-только начали выходить на сцену. Язык JavaScript [1] существовал 
всего несколько лет, а война браузеров была в самом разгаре. 
Безусловно, тогда можно было написать JavaScript-сценарий, 
выполняющий некоторые операции в одном браузере, но смог бы он 
работать в другом? Скорее всего, нет. Из-за этого в 2000 годах язык 
JavaScript получил дурную славу.
В середине 2000-х произошло два важных события, которые помогли 
JavaScript подняться в глазах разработчиков. Первым из них 
было появление технологии AJAX. [2] Технология AJAX позволяет 
разработчикам создавать более быстрые и более интерактивные веб-
страницы, благодаря возможности отправлять запросы на сервер в 
фоновом режиме и устранению необходимости для конечного пользователя 
обновлять содержимое окна браузера.
Вторым событием стало появление популярных библиотек на Ja-
vaScript, таких как Prototype, [3] которые существенно упростили 
создание JavaScript-сценариев, совместимых со всеми типами браузеров. 
Появилась возможность использовать технологию AJAX, 
чтобы сделать приложения более интерактивными и удобными в 
использовании, и задействовать библиотеку, такую как Prototype, 
чтобы обеспечить совместимость с основными типами браузеров.
В 2010 году, а точнее в 2011, развитие Всемирной паутины пошло 
по пути создания «одностраничных» приложений. Такие приложения 
выполняются под управлением JavaScript-фреймворков, таких 
как Backbone.js. [4] Эти фреймворки позволяют применять шаблон 
проектирования MVC [5] с использованием JavaScript. Стало возможным 
писать на JavaScript целые приложения, а затем загружать 
их и выполнять в браузере конечного пользователя. Все вместе это 
позволяет писать поразительно интерактивные и полнофункцио-
нальные клиентские приложения.
Однако, с точки зрения разработчика, ситуация выглядела не так 
радужно. Несмотря на то, что фреймворки и инструменты значительно 
упростили разработку подобных приложений, сам язык Ja-
vaScript оставался болезненным местом. Язык JavaScript является 
одновременно невероятно мощным, и в то же время чрезвычайно 
запутанным. Он полон парадоксов и ловушек, которые быстро могут 
сделать ваш программный код неконтролируемым и наполненным 
ошибками.
Так чего же хотят разработчики? Они хотят создавать эти замечательные 
новые приложения, но единственным языком, который 
понимают все браузеры, является JavaScript. Конечно, они могут писать 
эти приложения на Flash, [6] но для этого в браузеры необходимо 
устанавливать расширения, к тому же эти расширения отсутствуют 
для некоторых платформ, таких как устройства на iOS [7].
Впервые с языком CoffeeScript [8] я столкнулся в октябре 2010 
года. CoffeeScript давал мне надежду приручить JavaScript и подчеркивал 
наиболее выгодные стороны замысловатого языка, каковым 
является JavaScript. Он имеет ясный синтаксис, отдавая предпочтение 
пробелам вместо знаков пунктуации, и защищает от ловушек, 
поджидающих JavaScript-разработчиков на каждом шагу, таких как 
неочевидные правила видимости и неправильное употребление операторов 
сравнения. Но самое замечательное, что в конечном итоге 
программный код на CoffeeScript компилируется в стандартный 
программный код на JavaScript, который может выполняться в любом 
браузере или в другой среде выполнения JavaScript.
Когда я впервые попробовал использовать CoffeeScript, язык был 
еще далек от совершенства, даже в версии 0.9.4. Я использовал его 
в проекте моего клиента, чтобы попробовать и увидеть, является 
ли правдой все, что я слышал о нем. К сожалению, две причины 
заставили меня отложить его в сторону. Во-первых, язык еще не 
был готов к широкому использованию. В нем было слишком много 
ошибок и в нем отсутствовали многие возможности.
Вторая причина, заставившая меня отказаться от CoffeeScript, 
заключалась в том, что приложение, на котором я проводил эксперименты, 
не было настоящим JavaScript-приложением. Мне требовалось 
реализовать лишь кое-какие проверки и организовать отправку 
запросов с использованием технологии AJAX, что, благодаря 

Предисловие
Доступ онлайн
319 ₽
В корзину