Остросюжетный гайд. Ускоренное изучение JavaScript как второго (третьего...) языка.
Under development...
Данная книга предназначена для самостоятельного изучения JS на базе имеющихся знаний Computer Science и опыта программирования на других языках. Она не предназначена для обучения программированию с нуля.
Фундаментальные концепции Булевской алгебры, Условий, Циклов и т.д. в тексте не поясняются. Они повторяются от языка к языку и их знание принимается как базовое допущение.
Основной акцент сделан на особенности JS, неочевидные и малоочевидные вещи, а также продвинутые области, которым в других учебниках уделяется минимум места. Название книги, в том числе, даёт автору право затронуть спорные (и потому наиболее интересные) темы. Которые обычно – "политкорректно" – оставляются на "усмотрение читателя".
Автор текста имеет опыт коммерческого программирования на трёх языках, некоммерческого – на 15+ (не считая CSS, HTML, SQL...).
Основная идея гайда – изучение по аналогии – дополняется взглядом на язык с разных ракурсов: парадигм, истории, конкуренции, контр-примеров и поиска истины.
JS часто воспринимается как простой язык и учится как набор трюков,
заменяющих реальное знание. – Я знаю JS! – утверждает персонаж, использующий alert
для отладки...
Несложно встретить и противоположный взгляд, по которому JS – это полностью
сломанный язык, непроходимая PITA. Мнение подкрепляется специально отобранными "ужасающими" примерами
(не встречающимися на практике).
Оба мнения расходятся с реальностью. JavaScript (в редакции ES 2016-2017) – это сравнительно сложный язык, обладающий огромной грамматикой. Выразительные возможности JavaScript находятся на одном уровне с Python и Ruby.
JavaScript сложно выучить на однообразных задачах, возникающих в коммерческих проектах. В то же время, значительный процент "знаний" составляют deprecated синтаксические единицы и паттерны. В повседневной практике, следует ограничивать себя отобранным подмножеством языка.
Официальное название спецификации JavaScript: EcmaScript. Разница связана с лицензиями и не представляет особого интереса. Мы будем использовать термин JS или JavaScript в качестве названия языка и ES5, ES6, ES2015, ES2016 для ссылок на конкретные версии.
Все версии языка, на данный момент, обладают 100% обратной совместимости.
Ни авторы ES, ни сообщество пока не смогли выработать удовлетворительного
механизма удаления фич. Небольшие исключения типа "use strict"
можно
вынести за скобки.
Ситуацию спасает отсутствие стандартных библиотек в языке. Да – это огромный плюс! Python сообщество показало всем убедительный контр-пример. "Batteries included", сначала, кажется хорошей идеей. Затем, из-за увязки обновления библиотек с выпуском новых версий языка, – превращает базовый репозиторий в археологический музей. Стандартные пакеты Python устарели и разлагаются. Но, вопреки всеобщей ненависти, продолжают использоваться, как "стандартные"...
JS, безусловно, страдает от противоположной крайности, однако появление NodeJS и NPM в корне изменило ситуацию. Проблем с поиском библиотек в самой большой экосистеме в мире возникнуть не должно. Вероятно, даже число научных библиотек в JS уже превысило таковое в Python.
Проблема с "избытком альтернатив" является меньшим злом. Конкуренция – двигатель прогресса, а культура написания документации в JS сообществе находится на сравнительно высоком уровне Достаточно сказать, что на титульных страницах документаций нередко можно встретить перечень отличий от "конкурентов". О таком уровне большинство программистских сообществ могут лишь мечтать. Возьмите PHP с его бесчисленными "фреймворками", отличающимися друг от друга только названиями. Вспомните выдохшийся Java, где одно упоминание альтернатив считалось личным оскоблением. Или тот же Python с его культом "лидеров"...
Данная книга посвящёна JavaScript и не затрагивает вопросы API
(DOM, HTTP, и т.д.). Однако, примеры кода будут содержать console.log
,
который не является частью языка. Впрочем, и NodeJS и Браузеры
предоставляют данную функцию и, вероятно, её стандартизация – вопрос времени.
Также, при необходимости показать функцию из сторонней библиотеки, мы будем использовать синтаксис CommonJS. Имплементация ES модулей в NodeJS ожидается весной 2017, после чего материал будет обновлён.
Желающим запускать примеры предлагается:
- установить NodeJS (и редактор – если вы форматировали диск)
- копировать тексты примеров в отдельные файлы
- запускать файлы из консоли командой вида
$ node exampleX.js
Для простейших примеров можно ограничиться Node REPL ($ node
).
Автор книги стремится сделать ВСЕ примеры максимально простыми и понятными с первого взгляда. Если вы испытываете сложность с пониманием какого-либо абзаца или примера при последовательном чтении – открывайте соответствующий тред.
Чтение гайда рекомендуется выполнить дважды. Первый раз – пропуская ссылки на доп. ресурсы в пользу скорейшего прохождения. Второй раз – переходя по ним (... по интересующим лично вас).
Скоупинг, Хойстинг, Замыкания
Наследование, делегация, классы, ООП, динамический this.
Встроенные П- и О-типы во втором приближении. Продвинутые темы.
Рекомендованные ресурсы:
- Speaking JavaScript
- Exploring ES6
- Exploring ES2016-ES2017
- You Don't Know JS
- Eloquent JavaScript
- 2ality blog
Данный проект является некоммерческим. Автор вложил в него более сотни часов свободного времени. Поддержите данный проект, поставив ему ★ и поделившись ссылкой со знакомыми. Для подписки на обновления используйте режим Watch.