Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу).
Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Homepage Карта сайта Версия для печати

Джентльменский набор Web-разработчика   Ларри Уолл о Perl6   Наблы Система Orphus
 

11. Как писать крупные программы, а также кое-что о расстановке табуляции

[11 ноября 2001 г.]

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

«Дорогая редакция»

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

Чайник 

Все дело в том, какой «дизайн» здесь имеется в виду. В первой набле имелся в виду Web-дизайн, и только он — то есть, нечто, не связанное с процессом кодирования.

В этой и нескольких следующих наблах мы поговорим (правда, говорить будет только автор этой наблы, обратная связь пока что не предусмотрена) о том самом «дизайне в программировании». А именно — об удобном оформлении исходных кодов программ (в простонародье — исходников), которое позволит другим людям и вам в недалеком будущем легко разбираться в логике программ.

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

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

Особенно важно первое уравнение: оно показывает, что, вернувшись после месячного отпуска, вы можете и не поверить, что сами писали ту или иную программу. Даже если над программой работает один-единственный человек, все равно нужно придерживаться определенных правил, чтобы программа оставалась ясной для всех (это следует уже из второго уравнения).

Лирическое отступление 
Я не принуждаю вас использовать тот или иной устоявшийся стиль оформления исходников. Моя задача — лишь показать достоинства некоторого метода, выделить его положительные и отрицательные стороны. А уж использовать этот метод или нет — решать вам. Рекомендую, кстати, использовать.

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

Чайник 

Так называют совокупность символов табуляции, пробелов, перевода строки и т. д. — то есть, все «невидимые» символы.

Для выравнивания часто используют клавишу Tab. И вот, один из самых распространенных недостатков того или иного исходника — неправильное использование символов табуляции.

Возможно, вы сами никогда не используете табуляторы, а выравниваете свои программы при помощи одного лишь пробела. Что ж, этот способ также имеет преимущества, так как лишен всех подводных камней, которые описываются ниже. И все же большинство программистов используют клавишу Tab, а не пробел. Почему? Да потому, что табулятор наглядно показывает: этот отступ отражает логический уровень вложенности блока. Он сокращает объем исходного текста программы. Кроме того, используя пробелы, очень легко в одном месте использовать для отступа, скажем, 2 пробела, а в другом — 3 или 4. Это вносит дополнительную беспорядочность в процесс кодирования, коей там и без того предостаточно.

Чайник 

Символ табуляции выглядит в текстовых редакторах как несколько пробелов, число которых ровно такое, чтобы следующий символ находился в позиции, кратной некоторому числу N (отсчет позиции ведется с 0). Это число N назвается размером, или шириной, табуляции. Например, если строка состоит из 2 символов: "»а" (как "»" я здесь и далее обозначаю символ табуляции, который в оригинале невидим), и N=4, то на экране эта строка будет выглядеть так: "····a" (пробел обозначается как "·").

Разные программисты предпочитают устанавливать различный размер табуляции. Обычно он колеблется от 3 до 8 символов. Если знаки табуляции проставлены правильно, то открытие исходника в редакторе, настроенном на другую ширину табуляции, никак не сказывается на его читабельности. В противном случае... А давайте посмотрим на примере. Вот выдержка из http_main.c (одного из исходных файлов сервера Apache) при ширине табуляции, равной 8 символов.

Чайник 

Я немножко обрезал картинку по правому краю, чтобы она помещалась на эту страницу. Кстати, одним из самых удобных редакторов для работы с программами на Perl и PHP является EditPlus (если вы не буржуй, сходите также сюда, чтобы программа работала у вас вечно, а не один лишь месяц). Все приведенные в этой набле «снимки» сделаны именно из этого редактора.

Наверное, разработчики Apache очень горды собой: они одни из тех, кто до сих пор использует 8-символьную табуляцию. Теперь давайте поставим размер «табов» равным 4 символам (как будет видно далее, это самая удобная цифра) и посмотрим, что получится:

Видите, все поехало. Почему так произошло? Да потому, что разработчики нарушили здесь

первое правило расстановки табуляции: если следующая строка является вложением по сравнению с предыдущей (как строка 3 по отношению к строке 2 в примере), то ее «пробельный префикс» (все пробельные символы до первой буквы или цифры) обязательно должен начинаться с пробельного префикса предыдущей строки.

Как видим, в этом исходнике правило нарушено: строка 2 начинается с четырех пробелов, а строка 3 — с единственного табулятора. Давайте модифицируем текст так, чтобы он никогда не разъезжался. Для этого мы будем использовать табуляцию шириной 4 символа, как наиболее удобную в данном случае:

Теперь увеличим ширину табуляции до 8 символов:

Как видите, хотя длина отступа и увеличилась до безобразия, текст программы не поехал.

Теперь давайте рассмотрим еще один пример неправильного использования табуляторов. Вот он:

На первый взгляд, все в порядке. Однако это только на первый: попробуем увеличить размер табуляции до 5 символов.

Чайник 

Почему не до 8, как в прошлый раз? Только потому, что тогда рисунок не поместится на этой странице (особенно у людей, которые смотрят ее при низком разрешении экрана).

Опять у нас все разъехалось. Это потому, что нарушено

второе правило расстановки табуляции: никогда не использовать табуляторы вне пробельных префиксов строк — в частности, для выравнивания «хвостовых частей».

Чтобы текст удовлетворял второму правилу, мы должны отказаться от выравнивания стрелочек и комментариев с помощью табулятора, а делать это пробелами, вот так:

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

  • Apache. Выше вы сами видели, что творится в его исходниках.
  • Sendmail. Использование табуляции в качестве обязательных символов (пробелы недопустимы) в «директивах определения правил» его конфигурационного файла вызывает трепет в душах системных администраторов.
  • Некоторые модули для Perl. Часто там можно встретить точно такой же недостаток, как и в Apache. Еще чаще используют только пробелы, забывая о табуляторах.

Вот, пожалуй, и все, что можно сказать про символы табуляции. Грамотное их применение поможет вам придерживаться единого стиля при оформлении всех программ, а также избавит от головной боли людей (в том числе, и вас лично), которые в будущем решат «влезть» в программу.

 
Рекламный блок
   

Важное объявление:
    автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apache действительно объясняет такое решение.

Орфография на «Куроводстве»:
    если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите — настолько быстро все произойдет.

На заметку:
    если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.

Параметры этой страницы
   
GZip

Ссылки от спонсоров
   


Дмитрий Котеров | 11 ноября 2001 г. ©1999-2016 | Генеральный спонсор: Хостинг «Джино» | Контакт Вернуться к оглавлению