Развитие

Рецензия на книгу Дугласа Крокфорда «Как устроен JavaScript»

Рецензия на книгу Дугласа Крокфорда «Как устроен JavaScript» главное изображение

Привет, меня зовут Сергей. Уже год я работаю верстальщиком в хостинг-провайдере REG.RU и всё это время постепенно знакомлюсь с JavaScript. Чтобы узнать что-то новое об этом языке программирования, читаю такие источники, как MDN (Mozilla Developer Network), разные статьи в Medium, Learn.javascript.ru и смотрю видео на YouTube. Мне стало интересно, как же работает JavaScript изнутри, поэтому решил прочитать «Как устроен JavaScript» Дугласа Крокфорда.

Об авторе и книге

Дуглас Крокфорд — известный американский программист, создатель текстового формата обмена данными JSON (JavaScript Object Notation). Также Крокфорд постоянно участвует в развитии языка JavaScript и является автором таких инструментов, как статический анализатор кода JSLint и минификатор JSMin.

Дуглас Крокфорд написал несколько книг по языку JavaScript. Одна из них — «Как работает JavaScript» («How JavaScript Works»).

О чём книга и кому стоит её читать?

Для начала немного расскажу о содержании книги. Автор пишет о самом языке JavaScript, а не о каких-то других более утончённых его аспектах.

«Здесь не рассматриваются механизмы обработки кода JavaScript или виртуальные машины. Книга — о самом языке и о том, что должен знать каждый программист. В ней я попробую сделать радикальную переоценку JavaScript, того, как он работает, как его можно усовершенствовать и как лучше использовать. Речь идет о том, как думать о JavaScript и как думать в JavaScript».

В начале книги Крокфорд предупреждает читателя, что произведение подходит не новичкам, а специалистам, которые уже давно знакомы с JavaScript. Автор рассматривает основы языка с точки зрения их правильного использования в проектах, влияния на безопасность программы, написания практичного и понятного кода, сравнивает методы работы JavaScript с другими языками программирования.

«Эта книга написана для людей, имеющих определенный опыт работы с JаvаSсгiрt и желающих приобрести более чёткое и глубокое понимание того, как этот язык работает и как добиться от него наибольшей отдачи. Она также подойдет опытным программистам, желающим освоить еще один язык.

Издание не для начинающих. Надеюсь, что когда-нибудь напишу книгу и для них. Но эта им не подойдет. Её не назовешь легким чтивом. Беглый просмотр вам ничего не даст».

Крокфорд рассказывает о создании текстового формата обмена данными JSON. Читатель познакомится с мнением автора о том, почему именно те или иные методы и механизмы он вложил в этот формат.

Дуглас Крокфорд не обходит и отрицательные стороны JavaScript. В книге он размышляет, каким должен быть следующий язык программирования, который придёт на смену JavaScript, и какие сильные стороны ему стоит унаследовать от своего предшественника. Автор рассматривает, как работает транслируемый язык NEO, который, как считает Крокфорд, должен помочь перейти к новому языку, решив проблемы, имеющиеся в JavaScript. Также Дуглас Крокфорд рассказывает о других занимательных моментах, касающихся JavaScript.

Интересные мысли из книги

Читая книгу, я выделил несколько интересных для себя тезисов.

Именование переменных и функций

Автор считает, что использование символа подчеркивания (_) в имени переменной для указания её закрытости говорит о некомпетентности программиста.

«Символ подчеркивания (_) в начале или в конце имени иногда предназначается для указания общедоступного свойства или глобальной переменной, которая была бы закрытой, если бы программа была написана правильно. Следовательно, использование символа подчеркивания — признак некомпетентности программиста».

Крокфорд утверждает, что все имена должны начинаться с буквы в нижнем регистре. Это основано на существующей проблеме с оператором new: если он стоит перед именем функции, то она вызывается как функция-конструктор. Поскольку обычная функция и конструктор выглядят одинаково, это может запутать программиста. Поэтому автор советует прийти к единому соглашению по именованию функций-конструкторов: «Все имена функций-конструкторов должны начинаться с прописной буквы, и никакое другое имя не должно начинаться с буквы в верхнем регистре».

Далее Дуглас Крокфорд предлагает вообще отказаться от оператора new, объясняя это тем, что можно будет не использовать слова, которые начинаются с буквы в верхнем регистре.

Полезные методы

Из книги я узнал несколько полезных стандартных методов, которые наверняка пригодятся на практике.

  • метод Number.isNaN() позволяет протестировать, равно ли значение NaN или нет, и является более надёжным, чем функция isNan(), так как не преобразует параметр в число;

  • когда оператору typeof предлагается определить тип массива, то он возвращает «object». Дуглас Крокфорд советует использовать функцию Array.isArray(), чтобы точно определить принадлежность значения к массиву;

  • также я узнал о работе некоторых методов работы с массивами, их достоинствах и недостатках. Для себя отметил их классификацию «чистый — нечистый», разделяющую методы на не изменяющие и изменяющие исходные данные;

  • Дуглас Крокфорд, рассказывая об объектах, говорит, что для создания объекта использует Object.create(null). Автор подкрепляет свой выбор тем, что этот метод создаёт объект, который не имеет наследственности;

  • пожалуй, один из самых интересных моментов для меня — описание метода Object.freeze(). Метод получает объект и замораживает его, делая неизменяемым.

«К счастью, Object.create(null) создаёт объект, не обремененный наследственностью. Не возникает никакой путаницы ни с унаследованными свойствами, ни с непреднамеренным наследованием. В объекте нет ничего, кроме того, что в него помещено явным образом. Я сейчас пользуюсь Object.create(null) весьма часто».

Дуглас Крокфорд отмечает, что это положительно сказывается на безопасности и производительности проекта. Но автор предупреждает, что заморозка работает только на объектах верхнего уровня.

This

Привязка this довольно сложная в использовании, но Крокфорду удалось подробно и занимательно объяснить, как она работает. Автор рассказывает, каким образом она может повлиять на безопасность и надёжность проекта, и предлагает отказаться от её использования.

«Моё решение этой проблемы — полный запрет this. Аргументы: проблематичность и ненужность этой привязки. Если мы уберем this из языка, его полноценность по Тьюрингу не пострадает. Поэтому я начал программировать в диалекте, свободном от this, чтобы выяснить степень трудностей, связанных с отказом от неё.

Как же я удивился тому, что ситуация не усложнилась, а упростилась и мои программы стали меньше и качественнее».

Чистота функций

Любителей чистого кода порадует глава «Как работает чистота», где Крокфорд говорит о преимуществах чистых функций. Он советует, как добиться чистоты, и делает небольшой обзор всех компонентов языка, от которых нужно отказаться. К примеру, автор предлагает не использовать операторы присваивания, в том числе инструкции var и let, оставив только const. Оператор const позволяет инициализировать константу.

Оптимизация программ

В главе «Как работает оптимизация» ищите практические советы. Для себя я отметил, что при оптимизации нужно выбирать именно те функции, из которых получается понятная и легко обслуживаемая программа. Также я выделил принцип, которого автор советует придерживаться программистам: «Измерить, затем вырезать, затем ещё раз измерить».

Далее Дуглас Крокфорд подробнее раскрывает принцип: «Перед оптимизацией нужно измерить производительность оптимизируемого кода. Это делается, чтобы установить базовый уровень и показать, что код замедляет всю программу. Если код погоды не делает, нужно искать в другом месте. Затем проводится тщательная оптимизация кода. После чего снова выполняются измерения. Если изменения не позволяют существенно превзойти базовый уровень, они отклоняются. Они не позволили добиться ожидаемого улучшения, а сбои мы не проверяем».

Заключение

Это лишь часть интересных и полезных моментов, которые я для себя выделил. Уверен, что если перечитать «Как устроен JavaScript», можно открыть новые занимательные факты об этом языке программирования.

Читать эту книгу или нет — выбирать вам. Могу лишь сказать, что каждый, кто интересуется веб-разработкой, найдёт в ней для себя что-то новое и занятное.

Аватар пользователя Сергей
Сергей 15 июля 2020