ЧАСТЬ ВТОРАЯ



Урок 11 - Немного о грамматике (предисловие)

Пишу этот урок в новом, 2007 году. Так что у нас вроде как начался второй семестр.

Пока что «грамматика» изучалась в основном на сложных операторах. В остальных случаях мы просто «заучивали отдельные слова», не всегда, может быть, до конца понимая их. До определённого момента метод полезный. Но чем дальше, тем больше он становится порочным.

И вот наступает время, когда нам, наконец, пора «узнать, что мы говорим прозой». Вот оно и начинается, то самое обещанное занудство, которое я так старательно оттягивал. Но, как говорится, приехали.

Всё это, конечно, отнюдь не отменяет наших практических упражнений, они будут всё полезнее и, надеюсь, интереснее.

Но сегодня их ещё не будет. Этот небольшой «абстрактный» урок — предисловие к новому этапу, ведь теперь мы уже «кофейники»…

Чтобы это проиллюстрировать, представим себе заготовку двухуровнего меню в виде списка.

О культуре записи кода

В этом коде я также отследил и унифицировал запись всех не обязательных знаков препинания. Здесь я сам иногда грешу небрежностью, но призываю и себя, и Вас от этого избавляться.

И сейчас мы об этом чуть-чуть поговорим.

Объявление переменных

Когда слово var не обязательно? Только когда объявляется переменная с назначением: x = "Вася". В остальных случаях — обязательно.

Но чтобы не запоминать, где что можно, а где нельзя, предлагаю везде использовать ключевое слово var.

Точка с запятой

Каков смысл точки с запятой?

Это конец строки. Каждое выражение (объявление или инструкция) должно занимать отдельную строку. Но строка эта может быть как реальной (переводом каретки), так и «виртуальной» — ограниченной точкой с запятой. Всё, что следует после точки с запятой на этой же реальной строке, программа воспринимает как новую строку.

Вот несколько примеров:

//Правильно. var x y = 5 x = 3 document.write(x + y) //Правильно, хотя точки с запятыми здесь не обязательны. var x; y = 5; x = 3; document.write(x + y); /*Правильно, но где логика в этой единственной точке с запятой?*/ var x y = 5 x = 3 document.write(x + y); /*Правильно. Первое выражение (через запятую) - однострочное.*/ var x, y = 5 x = 3 document.write(x + y) /*А вот это неправильно: однострочные выражения нельзя разбивать на строки.*/. var x, y = 5 x = 3 document.write(x + y) /*Правильно, но по-человечески нелогично: зачем первую строку делать "виртуальную", а остальные - реальные?*/ var x; y = 5 x = 3 document.write(x + y) /*Правильно, и логика присутствует: на одной строке - объявления, на другой - инструкция.*/ var x, y = 5; x = 3 document.write(x + y) /*Правильно, но по-человечески опять же как-то неестественно.*/ var x, y = 5; x = 3; document.write(x + y) //Правильно. var x, y = 5; x = 3; document.write(x + y) //Неправильно. var x, y = 5 x = 3 document.write(x + y) Вырабатывайте свой стиль записи кода, но желательно, чтобы он был культурным. Либо Вы ставите точки с запятыми там и только там, где это необходимо, либо везде.

Удобочитаемость

Учтите, что код пишется не только для машины, но и для программистов. А программисты, всё-таки, люди, хотя порой весьма своеобразные.

Как писать — лепить много «виртуальных» строк на одной, чтобы «простыня» короче была, или в столбик, как стихотворение — решать Вам. Но так, чтобы это удобно было читать.

Как писать: x=3 или x = 3? С пробелами или без пробелов? Всё равно. Мне больше нравится с пробелами, а x++ или y-= — наоборот, без пробелов. Но одно и то же стараюсь писать одинаково.

Скобки

Всё, что находится в круглых скобках, должно быть на одной строке, удобно это или неудобно. Когда круглые скобки показывают заголовок оператора (перед его телом в фигурных), точку с запятой после них ставить нельзя. В арифметических выражениях круглые скобки используются так же, как в школьных примерах. Иногда можно их использовать просто для наглядности, как я сделал это в последней функции: i = (dlina – 1), чтобы показать, что (dlina – 1) — это не «что-то минус один», а конкретное число, которое назначается счётчику (а почему минус один — вспомните про «нулевой месяц январь»). Эти скобки можно и не ставить.

Фигурные скобки не реагируют на перевод каретки, и располагать их можно самым причудливым образом. Если при этом использовать ещё и «лесенку» с табуляцией (как в стихах Маяковского), то можно добиться очень наглядной записи хитро закрученных «слоёных» инструкций. Если в фигурные скобки помещается только одно выражение, то их можно отбросить. Но опять же: с точки зрения культуры — либо всегда отбрасывать, либо никогда.

Часто мы подтачиваем готовые скрипты, скачанные из интернета. Там может быть всё, что угодно. Я отнюдь не призываю править в них орфографию сообразно с Вашим стилем, но в скриптах, написанных «от нуля», старайтесь быть культурными.

Да зачем она нужна, эта культура?

А хотя бы затем, что этим Вы страхуете себя от лишних случайных ошибок, а если уж сделали, то при унифицированной записи кода их легче выловить. Видели по-настоящему большие скрипты? Те, что мы сейчас делаем, — они ведь почти «игрушечные».

На этом, пожалуй, я свои сентенции закончу, и перейдём к предисловию.

Теперь самые большие трудности начинаются для меня. Я уже говорил о недостатках большинства учебников. Они либо так подробны и методичны, что забываешь, ради какой конкретной задачи ты в него полез, либо настолько прагматичны, что опускают многие подробности, которые могли бы пригодиться для собственной переделки предложенных скриптов.

JavaScript специально приспособлен для web-страниц и использует довольно сложную и ветвистую объектную модель браузера. Это один наш «заяц». Другой «заяц» — это собственно объекты JavaScript с их многочисленными свойствами и методами.

Изучать это параллельно и постараться ничего не упустить — очень сложно. Но попробуем.

Наверно, самый лучший способ — это изучать конкретные скрипты по мере возрастающей сложности в обоих направлениях.

Очень многие скрипты — часы, календари, приветствия по времени суток, дата последнего обновления, подсчёт дней до и после события — связаны с объектом даты/времени. Объект довольно запутанный, и «нулевой месяц январь» — самая милая и невинная его причуда. Есть также разночтения в разных браузерах, но есть и алгоритмы, сводящие их практически на нет.

Но дата и время связаны с одной стороны с чистой математикой, с другой — с выводом строковых данных в браузер. Поэтому не мешает кое-что знать о свойствах и методах строковых и числовых объектов, а также о взаимодействии их с объектами браузетра.

Итак, мы узнали:

как, а главное — зачем надо правильно писать код.


К следующему уроку

К списку уроков JavaScript

(© А. Фролов)