ЧАСТЬ 1

March 21, 2024

Алиса Лисняк

Full Stack веб-разработчик. Ментор учебной программы 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 (Европейская ассоциация производителей компьютеров) 

разработала стандарт - так называемую "спецификацию" языка, под названием "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 стало можно писать полноценные удобные веб-приложения.