Программа, написанная в хорошем стиле, это, прежде всего, понятная программа. Необходимо все время помнить, что вашу программу кто-то (в первую очередь её автор) будет читать, и надо сделать так, чтобы у читателя не возникло лишних трудностей. Как же добиться этого? Пожалуй, пора переходить от общих слов к конкретным рекомендациям.
- 1. Не забывайте о комментариях
- Комментируйте описания переменных
- Комментируйте логику программы
- 2. Понимание переменных — ключ к пониманию программы
- Все переменные должны быть описаны
- Сопровождайте описания комментариями
- Тщательно выбирайте имена переменных
- 3. Разделяй и властвуй
- У каждой процедуры должна быть своя задача
- Процедура не должна быть большой
- 4. Текст должен быть удобен для чтения
- Выделяйте алгоритмическую структуру
- Смещение означает подчинение
- Не экономьте на пробелах
1. Не забывайте о комментариях
Все языки программирования позволяют включать в программу комментарии — пояснительный текст, который нужен только для человека. Компьютер не читает комментарии, он просто выбрасывает их из программы.
Комментарии — важнейший элемент стиля, это очень мощный инструмент, позволяющий сделать программу действительно понятной.
не жалейте времени на комментарии, не пытайтесь сэкономить на них. Помните: время, затраченное на написание продуманных комментариев, затрачено не зря, оно всегда окупается.
Комментируйте описания переменных
Каждое описание должно сопровождаться комментарием, поясняющим смысл этой переменой. Важно, чтобы этот комментарий был осмысленным и пояснял не программисткую, а содержательную суть переменной.
Примеры плохих комментариев: «счетчик», «дополнительная переменная», «вещественное число», «строка».
Примеры хороших комментариев: «количество найденных совпадений», » самое большое число в списке», «строка, подготовленная для печати»
Комментируйте логику программы
Программы могут быть основаны на довольно сложных алгоритмах, понять которые по тексту программы не так-то легко. В этом случае хорошие комментарии, поясняющие смысл алгоритма в целом, могут оказаться очень полезными.
Важно понимать, что комментировать надо в первую очередь сложно не программисткую, а содержательную суть выполнения действий, иначе комментарий становиться просто мусором, который не помогает, а мешает восприятию программ.
Вот типичный фрагмент из программы на Паскале:
k:=k+1; {увеличим k на 1}
Комментарий здесь абсолютно ничего не прибавляет к тексту программы: читатель и так видит, что k увеличивается на 1 (а если не видит, то ему не поможет даже самый подробный комментарий). Здесь был бы полезен комментарий, поясняющий, почему происходит это увеличение. Например, «нашли очередное совпадение» или «переходим к следующему элементу».
2. Понимание переменных — ключ к пониманию программы
Любая программа обрабатывает какую-то информацию. Эта информация представляется в программе в виде переменных (массивы и другие составные типы данных — это просто специальные виды переменных). Следовательно, для понимания программы необходимо в первую очередь понять смысл переменных, которые в ней используются.
Все переменные должны быть описаны
Для некоторых языков программирования этот совет избыточен.
Паскаль, Си заставляет описывать переменные — иначе программа считается синтаксически неверной.
А вот Бейсик и некоторые другие языки представляют программисту больше свободы: переменные можно и не описывать, их использование подразумевает автоматическое описание, а тип и другие необходимые данные определяются из контекста.
Но это очень обманчивая свобода.
Обязательное описание дисциплинирует программиста, стимулирует более тщательную проработку структуры данных. И читать программы с описанием намного легче: информация обо всех переменных собрана в одном месте, и если читатель забыл, что означает какая-то переменная, он знает, где сможет найти эти сведения.
Так что не всегда дополнительная свобода означает благо. Если ваш язык позволяет не описывать переменные, постарайтесь не расслабляться и не пользоваться этой на первый взгляд привлекательной, а на самом деле очень опасной возможностью.
Сопровождайте описания комментариями
При описании следует прокомментировать каждую переменную. Об этом уже говорилось, когда речь шла о комментариях. Еще раз подчеркнем, что комментировать необходимо назначение переменной, её соответствие каким-то данным из содержательной задачи, которую решает программа.
Тщательно выбирайте имена переменных
Описание и комментарий — это хорошо, но когда мы читаем программу, они остаются далеко в начале текста, и не хочется слишком часто к ним возвращаться. Имя переменной — другое дело. Оно неотделимо от переменной, оно всегда рядом, поэтому понимание смысла переменной во многом зависит от удачного выбора имени.
Имя переменной должно соответствовать её смыслу в программе. Следует избегать однобуквенных имен и конструкций типа «буква с цифрой» — в них легко запутаться. Надо давать близкие (но не слишком похожие) имена родственным данным, нельзя давать похожие имена данным, которые ничего общего не имеют.
3. Разделяй и властвуй
Главное понятие процедурного программирования — процедура. Нельзя сразу объять необъятное, поэтому грамотное разбиение на процедуры — ключ к успешному решению больших задач.
У каждой процедуры должна быть своя задача
Каждая процедура должна решать свою небольшую задачу. Очень полезно сформулировать эту задачу в явном виде и записать в виде комментария в начале процедуры. В идеале задача должна описываться одной короткой фразой. Если фраза получается длинной и сложной или не обойтись одной фразой вообще не удается, это чаще всего означает, что разбиение сделано не до конца и в данной процедуре скрывается ещё одна или несколько процедур, которые можно выделить и записать отдельно.
Процедура не должна быть большой
Объем процедуры должен быть таким, чтобы её было несложно охватить как единое целое, понять сразу всю логику ее работы. Обычно процедура без описаний и вступительного комментария должна помещаться на один экран. Если экрана не хватает, есть смысл подумать о дальнейшем разбиении.
4. Текст должен быть удобен для чтения
Для компьютера чаще всего не важно, как ваша программа разбита на строки и где в этих строках поставлены пробелы. Компилятор должен отделить лексемы (минимальные элементы, из которых состоит программа, — имена, знаки операций, служебные слова) друг от друга, а остальное ему безразлично.
Компилятору безразлично, а человеку — нет. От того, насколько удачно размещен текст программы, существенно зависит легкость ее восприятия.
Выделяйте алгоритмическую структуру
Опытные программисты всегда пишут программы «лесенкой». Каждый раз, когда в программе используется алгоритмическая структура (цикл, ветвления, выбор …), весь текст внутри этой структуры сдвигается вправо. Например, вот так:
<действия до цикла>
while <условие цикла> do
begin
<тело цикла>
end
<действия после цикла>
Такая запись позволяет увидеть, где начинается и где заканчивается конструкция, какие команды входят в нее, а какие нет. В сложных программах с большим количеством вложенных конструкций такая запись становиться просто необходимой: без нее будет чрезвычайно трудно разобраться в структуре программы.
Смещение означает подчинение
Это правило — расширение предыдущего. Записывая лесенкой алгоритмические структуры, мы смещаем вправо внутренние команды, показывая тем самым, что они подчинены заголовку.
Точно также можно показывать подчинение и в других случаях. Например, если длинный комментарий не помещается на строке, продолжение записывается со смещением, чтобы показать, что это не самостоятельное действие, а часть предыдущего.
Не экономьте на пробелах
Не забывайте о пробелах в строке. Ставьте их везде, где это может облегчить чтение и понимание программы. Если в одной строке записывается несколько операторов, обязательно ставьте пробелы между ними. Во многих случаях полезно ставить пробелы и при знаках действий.
До встречи в следующем уроке!