CoffeeScript. Второе дыхание JavaScript
Покупка
Тематика:
Программирование на Java
Издательство:
ДМК Пресс
Автор:
Бейтс Марк
Перевод:
Киселев Артём Николаевич
Год издания: 2023
Кол-во страниц: 311
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-89818-581-7
Артикул: 448685.04.99
Доступ онлайн
В корзину
Если вы уже умеете писать на JavaScript, на CoffeeScript вы сможете делать это лучше. А поскольку программный код на CoffeeScript «компилируется» в программный код на JavaScript, он легко впишется практически в любое веб-окружение. В книге автор рассказывает веб-разработчикам, почему язык CoffeeScript так удобен и как он позволяет избежать проблем, часто способствующих появлению ошибок в программном коде на JavaScript и усложняющих его сопровождение. Он познакомит вас со всеми особенностями и приемами, которые необходимо знать, чтобы писать качественный программный код на CoffeeScript, и покажет, как использовать преимущества еще более надежного набора инструментов, входящих в состав языка CoffeeScript.
Издание предназначено в первую очередь веб-разработчикам, использующим JavaScript, а также всем тем, кто хочет писать качественный и понятный код.
- Полная коллекция по информатике и вычислительной технике
- Веб-разработка
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование
- Программирование на Java
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
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, что, благодаря Предисловие
Доступ онлайн
В корзину