ЧАСТИНА 1
March 22, 2024
Аліса Лісняк
Full Stack web-розробник. Ментор навчальної програми Full Stack JavaScript

JavaScript: що це за мова програмування та як її вивчити?

Що пов’язує програмування і качку? Чому всі постійно плутають Java і JavaScript і яка ж між ними різниця? Де закінчуються жарти про динамічну типізацію у JavaScript? Про це і багато іншого - у статті. 

Мова програмування JavaScript: історія та еволюція

Давайте з самого початку. Що таке JavaScript? JS це високорівнева мова програмування. Що означає термін “високорівнева”?

Мова програмування - це інструмент для пояснення комп’ютеру, як той має вирішити певну задачу розробника. Всі мови можна умовно поділити на дві категорії:

  • Низькорівневі - максимально наближені до машинного коду, тобто до рівня безпосередніх процесорних команд
  • Високорівневі - мови, які використовують спрощення та певні мовні конструкції, що близькі для розуміння людям, а на рівень команд процесора їх перекладає спеціальна програма - компілятор або інтерпретатор.

Більшість сучасних мов програмування - високорівневі, тобто наближені до людських мов. Відповідно, для опанування такої мови людині не потрібно занадто глибоко вдаватись в механіку комп’ютерного заліза та розуміти, як працює кожна деталь у ньому. 

А як же тоді комп'ютер розуміє написаний код? Для цього існують спеціальні перекладачі - компілятори та інтерпретатори. Різниця між ними в тому, що компілятори заздалегідь до виконання програми перетворюють її на виконуваний файл, написаний вже “машинним кодом” - командами процесора, а інтерпретатори - як синхронні перекладачі на зустрічах - перекладають на машинний код одразу під час виконання, рядок за рядком. 

JavaScript - це інтерпретована мова, тобто для розуміння  її комп’ютером потрібен інтерпретатор - його часто називають рушієм, або JavaScript-engine (двигуном), який є у певних середовищах виконання коду, зокрема у браузерах. Різні браузери використовують різні рушії, найвідомішими серед них є V8, SpiderMonkey, Rhino та Chakra. Саме від рушія залежить виконання написаного коду.

Як було створено JavaScript?

Ще 30 років тому написання програм потребувало більше специфічних знань, а інструменти написання коду були далеко не такими продвинутими, як зараз.

JavaScript “з’явився на світ” у 1995 році, і початково називався LiveScript. Перед розробниками мови стояла мета створити просту в опануванні та гнучку мову для веб-сторінок, яка пов’язувала би html-елементи на сторінці, зображення та сторонні аплети (анімації). 

А оскільки на той момент інша мова програмування - Java - якраз набувала своєї популярності, цим вирішили скористатись і назвали нову розробку - JavaScript. Це призвело до плутанити, оскільки насправді JavaScript - це абсолютна інша мова, і вона схожа на Java не більше, ніж Java схожа на C (C або “Сі” - це мінімалістична процедурна мова початку 70-их років, і всі сучасні мови, які мають схожий на неї синтаксис, називають “Сі-подібними”). Насправді, Java та JavaScript - абсолютно різні мови, схожі між собою як французька та англійська.

Ключові розробки та версії

Слово “Script” означає сценарій, і саме для цього JS і використовувався на початку свого існування - для написання сценаріїв веб-сторінки. Для того, щоб мова стала уніфікованим та стандартизованим інструментом і могла еволюціонувати, некомерційна асоціація комп’ютерних виробників ECMA (European Computer Manufacturers Association) 

розробила стандарт - так звану “специфікацію” мови, під назвою “ECMA-262” або EcmaScript. Цей стандарт - по суті, прототип мови. 

Будь-які нововведення та зміни, які спільнота розробників пропонує, розглядаються комісією та - у разі прийняття пропозицій - вносить їх у наступну редакцію специфікації. Після виходу нової редакції ці нові можливості втілюються у різних рушіях, для того щоб середовище виконання могло “розуміти” новинки, які використовують розробники.

Перші редакції EcmaScript не були особливо цікавими. А от у 2015 році з’явилась відома 6-та версія (вона ж EcmaScript 6), яка містила дуже багато “карколомних” змін у прототипі мови, зокрема з’явились такі новинки:

  • Ключові слова let та const для створення змінних. До цього існувало тільки ключове слово var, що створювало глобальні змінні, які не мали розмежування області видимості)
  • Синтаксис класів. Це нововведення, до речі, було тільки спрощенням існуючого механізму функцій-конструкторів, який існував і раніше.
  • Оператор rest/spread. Оператор, який буквально пишеться як три крапки (“...”) здатний виконувати дві різні цілі - rest “збирає” всі параметри, що залишились нерозібраними, в масив, а spread - навпаки, розбирає колекцію на окремі елементи
  • Новий примітивний тип даних Symbol. Це “загадковий” тип даних, оскільки він представляє унікальні символічні значення, що створюються десь всередині пам’яті та недоступні для перегляду, а доступ до значень можливий лише за посиланням.
  • Стрілочні функції (Arrow function). Це новий синтаксис, який ще більше спрощує вирази функцій і дозволяє записати функцію всього в один рядок
  • Об’єкт Promise. Ось цей пункт можна вважати насправді найважливішим з усього переліку. До існування Promise-об’єктів будь-яка асинхронна робота (наприклад, запити на сервер) могла виконуватись за допомогою так званих callback-функцій, тобто функцій зворотнього виклику. Спроби “синхронізувати” асинхронну роботу часто призводили до необхідності вкладати одну функцію в іншу, що за певної глибини вкладеності суттєво ускладнювало читання та підтримку такого коду. Поява Promise-об’єктів змінила все, і тепер асинхронний код стало писати і підтримувати значно легше!
  • Глобальні вбудовані об’єкти Map, Set. Зручні ітеровані колекції (структури даних, які реалізують механізм перебору елементів)
  • Цілий перелік нових методів для вже існуючих глобальних вбудованих об’єктів Math, Number, Array, String, Object
  • Цикл for/of для ітерованих об’єктів та багато іншого

Саме з появою EcmaScript 6 (ще її іноді називають ES6 або EcmaScript 2015 за роком появи) пов’язана зміна підходу до JS в цілому - якщо до цього JS була мовою сценаріїв, яка не давала багато можливостей для вирішення нетривіальних задач, то після виходу 6-тої редакції js почала набувати популярності. Після 2015 року нові версії стандарту почали виходити щорічно, їх умовно об’єднують терміном ES.Next і останньою станом на лютий 2024 актуальною версією специфікації є 14-та.

Як JavaScript змінив веб-розробку?

Якщо початково ця мова замислювалась як з’єднувальна ланка між html-елементами на веб-сторінці та сторонніми аплетами, написаними іншими мовами програмування, то після виходу ES6 джаваскрипт стала самостійною і повноцінною мовою програмування, засобів якої вже достатньо для реалізації всіх програмних рішень, які до того робились іншими мовами. По суті, необхідність у сторонніх аплетах просто відпала, оскільки тепер за допомогою js стало можна писати повноцінні зручні веб-додатки.