Книга «ES6 і не тільки»

image Навіть якщо у вас вже є досвід роботи з JavaScript, швидше за все, мова ви в повній мірі не знаєте. Особлива увага у цій книзі приділяється функціям, що з'явилися в Ecmascript 6 (ES6) — останньої версії стандарту JavaScript.

ES6 оповідає про тонкощі мови, малознайомих більшості працюючих на JavaScript програмістів. Озброївшись цими знаннями, ви досягнете справжньої майстерності; вивчіть новий синтаксис; навчіться коректно використовувати ітератори, генератори, модулі і класи; зможете більш ефективно працювати з даними; познайомитеся з новими API, наприклад Array, Object, Math, Number і String; розширите функціонал програм за допомогою мета-програмування.

Цілі та завдання
Якщо ви схильні заносити в чорний список все, що в JavaScript здається дивним або незрозумілим (а деякі звикли чинити саме так), в якийсь момент від багатого можливостями мови у вас залишиться лише порожня оболонка.

Таке доступне всім підмножина механізмів JavaScript прийнято вважати сильними сторонами цієї мови, але правильніше назвати це легкі в освоєнні, безпечними чи навіть мінімальними можливостями.

Я (автор) пропоную вам вчинити навпаки: досконально вивчити JavaScript, щоб зрозуміти навіть найскладніші його особливості. Саме про них піде мова в цій книзі.

Мені відома схильність JS-розробників вивчати лише мінімум, необхідний для вирішення конкретної задачі, але в моїй книзі ви не зустрінете поширеною рекомендації уникати труднощів.

Навіть якщо щось працює потрібне мені чином, я не готовий задовольнитися самим цим фактом — мені важливо зрозуміти, чому і як воно працює. Хотілося б, щоб ви розділили мій підхід. Я ненав'язливо кличу вас пройти по тернистій дорозі, якою мало хто ходив, і повністю осмислити, що являє собою мова JavaScript і які можливості він дає. І коли ви будете володіти цими знаннями, жодна техніка, ні одна платформа, жоден новий підхід не опиняться за межами вашого розуміння.

Кожна з книг серії You don't Know JS глибоко і вичерпно розкриває конкретні ключові елементи мови, які найчастіше тлумачиться невірно або поверхнево. Після прочитання цієї літератури ви отримаєте тверду впевненість в тому, що розумієте не тільки теоретичні, але і практичні нюанси.

Ті знання JavaScript, що у вас є, швидше за все, ви отримали від людей, які самі потрапили в пастку недостатнього розуміння. Це всього лише тінь того, чим JavaScript є насправді. Ви ще не знаєте його, але книги серії You don't Know JS допоможуть вам надолужити згаяне. Тому вперед, дорогі друзі, мова JavaScript чекає на вас!

ES: сучасність і майбутнє
Для читання цієї книги ви повинні добре володіти мовою JavaScript аж до останнього (на момент написання книги) стандарту, який називається ES5 (точніше, ES5.1), оскільки ми з вами будемо розглядати новий стандарт ES6, попутно намагаючись зрозуміти, які перспективи чекають JS.

• Up & Going: Ви тільки починаєте вивчати програмування і JS? Перед вами карта, яка допоможе вам у подорожі по новій галузі знань.

• Scope & Closures: чи Відомо вам, що в основі лексичного контексту JS лежить семантика компілятора (а не інтерпретатора)? Чи Можете ви пояснити, яким чином замикання є прямим результатом лексичної області видимості і функцій як значень?

• this & Object Prototypes: чи Можете ви назвати чотири варіанти значення ключового слова this залежно від контексту виклику? Чи доводилося вам плутатися в псевдоклассах JS, замість того, щоб скористатися більш простим шаблоном проектування behavior delegation? А чи чули ви коли-небудь про об'єкти, які пов'язані з іншими об'єктами (OLOO)?

• Types & Grammar: чи Знайомі ви з вбудованими типами JS і, що більш важливо, чи знаєте способи правильного і безпечного приведення типів? Наскільки впевнено ви розбираєтеся в нюансах граматики і синтаксису мови?

• Async & Performance: Ви все ще використовуєте зворотні виклики для управління асинхронними діями? А чи можете ви пояснити, що таке об'єкт promise і як він дозволяє уникнути ситуації, коли кожна фонова операція повертає свій результат (або помилку) у зворотному виклик? Чи знаєте ви, як за допомогою генераторів покращити читабельність асинхронного коду? Нарешті, чи відомо вам, що являє собою повноцінна оптимізація JS-програм і окремих операцій?

Якщо ви вже прочитали всі ці книги і освоїли розглянуті там теми, значить, прийшов час зануритися в еволюцію мови JS і дослідити зміни, які чекають нас як найближчим часом, так і у віддаленій перспективі.

На відміну від попереднього стандарту, ES6 не можна назвати ще одним скромним набором доданих до мови API. Він приніс з собою безліч нових синтаксичних форм, і до деяких з них, цілком можливо, буде не так-то просто звикнути. З'явилися також нові структури і нові допоміжні модулі API для різних типів даних.

ES6 — це крок далеко вперед. Навіть якщо ви вважаєте, що добре знаєте JS стандарту ES5, ви зіткнетеся з безліччю незнайомих речей, так що будьте готові! У книзі розглянуті всі основні нововведення ES6, без яких неможливо увійти в курс справи, а також даний короткий огляд планованих функцій — про них має сенс знати вже зараз.

Підтримка версій
Стандарт JavaScript офіційно називається ECMAScript (або скорочено ES), і до недавнього часу всі його версії позначалися тільки цілими числами. ES1 і ES2 не отримали популярності і масової реалізації. Першою широко поширилася основою для JavaScript став ES3 — стандарт цієї мови для браузерів Internet Explorer з 6-го по 8-ю версію і для мобільних браузерів для Android 2.x. З політичних причин, про які я промовчу, ця версія ES4 так і не побачила світу.

У 2009 році було офіційно завершено ES5 (ES5.1 з'явився в 2011-му), що одержав поширення в якості стандарту для безлічі сучасних браузерів, таких як Firefox, Chrome, Opera, Mozilla та ін

Наступна версія JS (поява якої було перенесено з 2013-го спочатку на 2014-й, а потім на 2015 рік) в обговореннях фігурувала під очевидним назвою ES6. Але пізніше стали надходити пропозиції перейти до схеми іменування, заснованої на рік виходу чергової версії, наприклад ES2016 (вона ж ES7), яка буде закінчена до кінця 2016 року. Згодні з таким підходом далеко не всі, але є ймовірність, що стандарт ES6 стане відомий користувачам під назвою ES2015. А поява версії ES2016 стане свідченням остаточного переходу на нову схему іменування.

Крім того, було відзначено, що швидкість еволюції JS перевищує одну версію в рік. Як тільки в обговореннях стандарту виникає нова ідея, розробники браузерів пропонують прототипи нового функціоналу, а програмісти-першопрохідці приймаються експериментувати з кодом.

Зазвичай задовго до офіційного схвалення новий функціонал стає стандартом де-факто завдяки раннім прототипам движка і інструментарію. Відповідно, має сенс розглядати майбутні версії JS як пов'язані з появою нового функціоналу, а не з довільним набором основних особливостей (як робиться зараз) або з роком (як планується).

У цьому випадку номер версії перестає мати ту важливість, якою володів раніше, а JavaScript перетворюється на живий, постійно мінливий стандарт. І краще не говорити про коді як про «написаний у відповідності з таким стандартом», а розглядати його в залежності від підтримуваних функціональних особенностейподдерживаемых функціональних особливостей.

Транскомпиляция
Швидка еволюція функціоналу ставить серйозну проблему перед розробниками, охочими використовувати нові можливості в ситуації, коли їх сайти або програми, що працюють у більш старих браузерах, що не підтримують нововведення.

По всій видимості, ES5 не прижився в багатьох місцях, тому що в основному базу коду не приводили у відповідність з новим стандартом до тих пір, поки не припинилася підтримка більшості, якщо не всіх, що передують платформ. У результаті багато розробники тільки недавно почали користуватися такими речами, як, наприклад, строгий режим, з'явився в ES5 більше п'яти років тому.

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

Як же вирішити протиріччя? Тут на допомогу приходять спеціальні інструменти, зокрема техніка транскомпиляции2. Грубо кажучи, ви за допомогою спеціального інструменту перетворюєте код ES6 в еквівалент (або щось близьке до нього), що працює в середовищах ES5.

В якості прикладу візьмемо скорочені визначення властивості (див. розділ «Розширення об'єктних літералів» в розділі 2). Ось як це робиться в ES6:

var foo = [1,2,3];
var obj = {
foo // означає 'foo: foo'
};

obj.foo; // [1,2,3]
А ось яким чином (приблизно) він транскомпилируется:
var foo = [1,2,3];

var obj = {
foo: foo
};
obj.foo; // [1,2,3]



Таке невелике, але зручне перетворення дозволяє у випадку однакових імен скоротити оголошення об'єктного літерала foo: foo до foo. Дії транскомпилятора в цьому випадку являють собою вбудований робочий процес, аналогічний линтингу, минификации та інших подібних операцій.

Бібліотеки Shim (полизаполнения)
Далеко не всім новим функціональним особливостям ES6 потрібно транскомпилятор. Полизаполнения (polyfills), які також називають бібліотеками Shim, являють собою шаблони для визначення поводжень з нової середовища для більш старих середовищ. У синтаксисі полизаполнения неприпустимі, але для різних API їх цілком можна використовувати.

Давайте розглянемо новий метод Object.is(..), призначений для перевірки суворої еквівалентності двох значень, але без докладних винятків, які є у оператора === для значень NaN та -0. Полизаполнение для методу Object.is(..) створюється дуже просто:

if (!Object.is) {
Object.is = function(v1, v2) {
// перевірка для значення '-0'
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
// перевірка для значення 'NaN'
if (v1 !== v1) {
return v2 !== v2;
}
// все інше
return v1 === v2;
};
}



Є чудова колекція ES6 Shim, яку варто включати в усі нові JS-проекти.

Передбачається, що JS чекає безперервний розвиток і підтримка в браузерах нових функцій буде реалізовуватися поступово по мірі їх появи, а не великими фрагментами. Так що найкраща стратегія збереження актуальності — це додавання в базу коду полизаполнений, включення транскомпиляции у процес складання і постійна готовність самого розробника до змін.

Ті ж, хто мислить консервативно і відкладає використання нового функціоналу, поки не зникнуть всі працюючі без нього браузери, завжди будуть плентатися далеко позаду. Їх обійдуть стороною всі інновації, що дозволяють зробити написання коду на JavaScript більш результативним, раціональним і надійним.

Підводимо підсумки
На момент написання книги стандарт ES6 тільки з'явився, тому вам належить багато чому навчитися. Однак куди важливіше перебудувати свій світогляд у відповідності з новим варіантом розвитку мови JavaScript. Звичай роками чекати офіційних документів, які схвалюють зміну стандарту, має залишитися в минулому.

Тепер нові функціональні особливості JavaScript відразу ж після своєї появи реалізуються в браузерах, і тільки від вас залежить, чи будете ви користуватися ними негайно або ж продовжуйте діяти неефективно в спробах застрибнути в потяг. Неважливо, які форми прийме JavaScript, — тепер це буде відбуватися швидше, ніж коли-небудь у минулому. Транскомпиляторы і полизаполнения — ось інструменти, які дозволять вам весь час залишатися на передньому краї розвитку мови.

Ви повинні прийняти нову реальність JavaScript, де розробникам настійно рекомендується перейти від вичікування до активної позиції. А почнеться все з вивчення ES6

» Більш докладно з книгою можна ознайомитися на сайті видавництва
» Зміст
» Уривок

Для Хаброжителей знижка 25% по купону — ES6
За фактом оплати паперової книги відправляємо на e-mail електронні версії книги.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.