Программирование на языке Pascal

       

Кусочки, куски и кусищи...


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

Совет 7. Не нуждается в особой пропаганде главное правило: на каждой строке должен находиться только один оператор. А сложные операторы лучше и вовсе размещать на нескольких последовательных строках. Тогда при пошаговой прогонке легче будет локализовать искомую ошибку.

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

Совет 9. Пишите программы "лесенкой", позволяющей легко видеть, где кончается один блок и начинается другой. Разные блоки должны иметь различные отступы, а все операторы одного блока - одинаковые; причем чем глубже уровень вложенности блока, тем дальше отстоит он от левого края экрана. Совсем без отступа можно записывать только разделы описаний головной программы, слова begin...end., ограничивающие основное тело программы, а также заголовки процедур и функций. Все остальные операторы, даже строки-комментарии, должны иметь отступ.

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

Совет 10. Большие блоки, отвечающие за крупные шаги алгоритма, отделяйте друг от друга строками-комментариями, облегчающими ориентирование по тексту программы в процессе ее отладки.

Совет 11. Операторные скобки begin...end всегда расставляйте парами, причем каждый end должен начинаться с той же позиции строки, что и открывший его begin, а заключенный между ними операторный блок должен быть сдвинут еще как минимум на одну позицию вправо, чтобы скобки не сливались с остальным текстом программы.

Порядок написания любого блока должен быть следующим:

  1. begin
  2. <...> {вложенный блок}
  3. end;


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

Если в вашей программе несколько (хуже - много) вложенных или просто очень длинных блоков (для одного или двух коротких это еще не так актуально), то возле каждого оператора end ставьте комментарий-пометку, какой именно begin он закрывает. Не забывайте, что простое совпадение количества begin-ов и end-ов не может служить гарантией того, что все они расставлены в нужных местах. А если среди нескольких идущих подряд end-ов, закрывающих обычные begin-ы, встречается и end, замыкающий оператор case, то возле него обязательно нужно поставить указание {end_case}, иначе вы можете потратить немало времени на поиски якобы недостающего оператора begin. Дело в том, что когда мозг человека настраивается на поиск какого-либо конкретного слова, то не похожие на него слова он имеет обыкновение пропускать, не обращая на них никакого внимания, а поскольку слово case даже отдаленно не напоминает begin , то при таком поиске-просмотре оно, скорее всего, будет отброшено.

Совет 12. Желательно, чтобы каждый оператор if имел не только then-, но и else-ветвь, даже если она останется пустой. Это позволит вам избежать двусмысленных структур вроде

if ... then if ... then ... else ...

которая на самом деле воспринимается компилятором совершенно иначе:

if ... then if ... then ... else ...

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

if ... then if ... then ... else <один отладочный оператор> else ...

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

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

if ... then begin if ... then ... else <один отладочный оператор> end else ...

Если теперь мы удалим ту же строку, никакого вреда программе это не нанесет. Поэтому:

Совет 13. Ненужные с точки зрения алгоритма, однако не нарушающие структуры программы операторные скобки еще никому не мешали. Как говорится, "кашу маслом не испортишь"!

Совет 14. Никогда не пользуйтесь оператором goto! Язык Pascal предоставляет достаточное количество операторов, позволяющих легко структурировать любую программу. Единственным исключением из этого правила является ситуация нескольких вложенных циклов, описанная в лекции 3. И в любом случае оператор goto не должен передавать управление назад по тексту программы.


Содержание раздела