Skip to content

ivan-kleshnin/subjective-js-ru

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Субъективный JavaScript

Остросюжетный гайд. Ускоренное изучение 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).

Автор книги стремится сделать ВСЕ примеры максимально простыми и понятными с первого взгляда. Если вы испытываете сложность с пониманием какого-либо абзаца или примера при последовательном чтении – открывайте соответствующий тред.

Чтение гайда рекомендуется выполнить дважды. Первый раз – пропуская ссылки на доп. ресурсы в пользу скорейшего прохождения. Второй раз – переходя по ним (... по интересующим лично вас).

Содержание

1. Введение

2. Примитивы

3. Система типов

4. Builtins

5. Видимость переменных

Скоупинг, Хойстинг, Замыкания

5. Прототипная модель

Наследование, делегация, классы, ООП, динамический this.

6. Встроенные типы и классы

Встроенные П- и О-типы во втором приближении. Продвинутые темы.

Ресурсы

Рекомендованные ресурсы:

Поддержать проект

Данный проект является некоммерческим. Автор вложил в него более сотни часов свободного времени. Поддержите данный проект, поставив ему ★ и поделившись ссылкой со знакомыми. Для подписки на обновления используйте режим Watch.

About

Субъективный JavaScript

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published