Выбрать главу

Если это звучит знакомо, то это потому, что именно таким образом веб-браузеры работают с HTML и CSS. Даже если в HTML или CSS есть ошибки, браузер все равно попытается обработать информацию, пропуская все фрагменты, которые он не может разобрать.

Объявление

HTML и CSS являются примерами декларативных языков. Автор, пишущий на декларативном языке, описывает желаемый результат, не предоставляя пошаговых инструкций компьютеру, обрабатывающему файл. В HTML вы можете описать характер содержимого – параграфы, заголовки, поля формы и т.д. – без необходимости объяснять, что именно браузер должен делать с этой информацией. С помощью CSS можно описать желаемый внешний вид содержимого – цвета, границы и т.д. – без необходимости писать программу для применения этих стилей.

Большинство языков программирования не являются декларативными, они императивные. Perl, Java, C++ … все это примеры императивных языков. Если вы пишете на одном из этих языков, вы должны дать точные инструкции компьютеру, интерпретирующему ваш код.

Императивные языки предоставляют вам больше возможностей и точности, чем декларативные языки. За это приходится платить. Императивные языки, как правило, труднее изучать, чем декларативные. Кроме того, к императивным языкам сложнее применить закон Постеля. Если вы допустите одну ошибку – одну неправильно поставленную запятую или точку с запятой – вся программа может не сработать. Неправильно написанный тег в HTML или пропущенная фигурная скобка в CSS также могут стать причиной головной боли, но императивные программы должны быть хорошо сформированы, иначе они вообще не будут выполняться.

Императивные языки, такие как PHP, Ruby и Python, можно найти на серверах, питающих Всемирную паутину, читающих и записывающих записи баз данных, обрабатывающих входные данные и выполняющих сложные алгоритмы. Вы можете выбрать практически любой язык программирования при написании кода на стороне сервера. В отличие от неизвестности веб-браузера конечного пользователя, вы можете контролировать возможности своего сервера.

Если вы хотите писать императивный код, который работает в веб-браузере, у вас есть только один выбор: JavaScript.

Скриптинг

Идея выполнения программы изнутри веб-страницы так же стара, как и сам веб. Вот раннее письмо в список рассылки www-talk:

«Я хотел бы знать, расширил ли кто-нибудь WWW так, чтобы можно было запускать произвольные программы нажатием кнопки в WWW-браузере.»

Тим Бернерс-Ли, создатель Всемирной паутины, ответил на это:

«Очень хороший вопрос. Проблема заключается в языке программирования. Вам нужно что-то действительно мощное, но в то же время вездесущее. Помните, что одна из граней Интернета – это универсальная читательская аудитория. Не существует универсального интерпретируемого языка программирования.»

Это было в 1992 году. Универсальный интерпретируемый язык программирования наконец-то появился в 1996 году. Он был написан за десять дней программистом из Netscape по имени Брендан Эйх.

Язык пережил несколько смен названий. Сначала он назывался Mocha. Затем он был официально представлен как LiveScript. Затем в дело вмешался отдел маркетинга и переименовал его в JavaScript, надеясь, что это название подхватит волну шумихи, связанную с новым тогда языком Java. На самом деле у этих языков мало общего. Java для JavaScript – это как ветчина для хомяка.

Характерные черты прогресса

JavaScript дал дизайнерам возможность обновлять веб-страницы даже после их загрузки. Вскоре появились два распространенных способа использования: ролловеры и валидация форм.

Смена изображений при наведении курсора на ссылку может показаться не совсем разумным использованием совершенно нового языка программирования, но в девяностые годы не было другого способа создания эффектов наведения.

До появления JavaScript форма должна была быть отправлена на веб-сервер, прежде чем вы могли убедиться, что все необходимые поля заполнены, или что введенная информация соответствует ожидаемому формату.

Оба этих варианта использования все еще существуют, но теперь нет необходимости обращаться к JavaScript. Вы можете создавать эффекты перелистывания с помощью псевдокласса :hover в CSS. Вы можете проверять поля формы с помощью атрибутов REQUIRED и TYPE в HTML.

Эта схема повторяется снова и снова: решение создается на императивном языке и, если оно достаточно популярно, со временем переходит на декларативный язык. Когда функция доступна на декларативном языке, ее не только легче написать, но и она более надежна.