Глаза страшат, а руки делают

ЧАСТЬ ВТОРАЯ


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

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

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

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

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

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

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

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

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

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

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

Что значит — глобальная? Глобальными называются переменные, объявленные вне функций и циклов и потому доступные в любом месте скрипта.

Локальные переменные, объявленные внутри функций и циклов и доступные только в этих функциях и циклах, должны всегда объявляться с ключевым словом var.

// объявляем глобальные переменные
a = 5;
i = 0;
// теперь используем их в цикле
for (i=0; i<=10; i++)
a += 4

НО!..

// объявляем только a
a = 5;
// для счётчика используем локальную переменную
for (var i=0; i<=10; i++)
a += 4

Но чтобы не запоминать, где что можно, а где нельзя, предлагаю везде использовать ключевое слово 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 с их многочисленными свойствами и методами.

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

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

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

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

Следовательно, вплотную займёмся объектами.


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

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


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


 005134