Ноя
13th

Что же такое хороший стиль

Программа, написанная в хорошем стиле, это, прежде всего, понятная программа. Необходимо все время помнить, что вашу программу кто-то (в первую очередь её автор)  будет читать, и надо сделать так, чтобы у читателя не возникло лишних трудностей. Как же добиться этого? Пожалуй, пора переходить от общих слов к конкретным рекомендациям.

1. Не забывайте о комментариях

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

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

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

Комментируйте описания переменных

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

Примеры плохих комментариев: “счетчик”, “дополнительная переменная”, “вещественное число”, “строка”.

Примеры хороших комментариев: “количество найденных совпадений”, ” самое большое число в списке”, “строка, подготовленная для печати”

Комментируйте логику программы

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

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

Вот типичный фрагмент из программы на Паскале:

k:=k+1; {увеличим k на 1}

Комментарий здесь абсолютно ничего не прибавляет к тексту программы: читатель и так видит, что k увеличивается на 1 (а если не видит, то ему не поможет даже самый подробный комментарий). Здесь был бы полезен комментарий, поясняющий, почему происходит это увеличение. Например, “нашли очередное совпадение” или “переходим к следующему элементу”.

2. Понимание переменных – ключ к пониманию программы

Любая программа обрабатывает какую-то информацию. Эта информация представляется в программе в виде переменных (массивы и другие составные типы данных – это просто специальные виды переменных). Следовательно,  для понимания программы необходимо в первую очередь понять смысл переменных, которые в ней используются.

Все переменные должны быть описаны

Для некоторых языков программирования этот совет избыточен.

Паскаль, Си заставляет описывать переменные – иначе программа считается синтаксически неверной.

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

Но это очень обманчивая свобода.

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

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

Сопровождайте описания комментариями

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

Тщательно выбирайте имена переменных

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

Имя переменной должно соответствовать её смыслу в программе. Следует избегать однобуквенных имен и конструкций типа “буква с цифрой” – в них легко запутаться. Надо давать близкие (но не слишком похожие) имена родственным данным, нельзя давать похожие имена данным, которые ничего общего не имеют.

3. Разделяй и властвуй

Главное понятие процедурного программирования – процедура.  Нельзя сразу объять необъятное, поэтому грамотное разбиение на процедуры – ключ к успешному решению больших задач.

У каждой процедуры должна быть своя задача

Каждая процедура должна решать свою небольшую задачу. Очень полезно сформулировать эту задачу в явном виде и записать в виде комментария в начале процедуры. В идеале задача должна описываться  одной короткой фразой. Если фраза получается длинной и сложной или не обойтись одной фразой вообще не удается, это чаще всего означает, что разбиение сделано не до конца и в данной процедуре скрывается ещё одна или несколько процедур, которые можно выделить и записать отдельно.

Процедура не должна быть большой

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

4. Текст должен быть удобен для чтения

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

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

Выделяйте алгоритмическую структуру

Опытные программисты всегда пишут программы “лесенкой”. Каждый раз, когда в программе используется алгоритмическая  структура (цикл, ветвления, выбор …), весь текст внутри этой структуры сдвигается вправо. Например, вот так:

<действия до цикла>

while <условие цикла> do

begin

<тело цикла>

end

<действия после цикла>

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

Смещение означает подчинение

Это правило – расширение предыдущего. Записывая лесенкой алгоритмические структуры, мы смещаем вправо внутренние команды, показывая тем самым, что они подчинены заголовку.

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

Не экономьте на пробелах

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

До встречи в следующем уроке!

Поделиться с друзьями


Оставить комментарий или два