Ясность программирования
Задача программиста должна состоять в том, чтобы писать на исходном языке программы, предназначенные для аудитории, состоящей в первую очередь из людей, а не машин. Эта задача требует уделить больше внимания ясности, простоте и доступности текста за счет игнорирования менее важных критериев, например краткости (число ударов по клавишам, необходимых для того, чтобы напечатать программу) или машинной эффективности. Выполнение следующих правил помогает писать ясные программы [1].
Используйте осмысленные имена. Это правило выражает самый важный принцип стиля программирования. Ничего нет хуже программы с именами XX, XXX, ХХХХ, XY, ЕКК, ЕККК, А и AI, заполненной комментариями, разъясняющими смысл и назначение этих имен. Простой прием – использование более длинных содержательных имен – значительно облегчает чтение программы и сводит к минимуму количество необходимых комментариев. Как правило, имена переменных должны содержать от 4 до 12 символов. Слишком длинные имена, типа ЧИСЛО _ ТРАНФОРМАЦИЙ _ НА _ СООБЩЕНИЕ, нежелательны, потому что они отвлекают внимание от собственно программы и сами подвержены ошибкам.
Длина используемых имен зависит от ограничений языка программирования. Фортран существенно ограничивал длину имен (не более 6 символов). В большинстве реализаций PL/1 были разрешены идентификаторы длиной до 31 символа, но имена процедур ограничивались семью символами – серьезное ограничение, если пытаться давать процедурам осмысленные имена. В современных языках этот недостаток был устранен.
Избегайте сходных имен. Иногда встречаются программы, в которых используются такие имена переменных, как VALUE и VALUES, или ряд переменных с именами BRACA, BRACB, BRACC и BRACD. Это усложняет чтение программы. Выбирая осмысленные имена, старайтесь, чтобы они были как можно менее похожи.
Если в идентификаторах используются цифры, помещайте их только в конце. Цифры 0, 1, 2 и 5 легко спутать с буквами О, I, Z и S. Если уж цифры в именах переменных необходимы, помещайте их в конце.
Никогда не используйте в качестве идентификаторов ключевые слова.
В следующем примере на языке Cи++
int max(int x, int y)
{
if (x > y)
return x;
else
return y;
}
max, x и y – имена или идентификаторы. Слова int, if, return и else – ключевые слова, они не могут быть именами переменных или функций и используются для других целей.
Избегайте промежуточных переменных. Хотя в большинстве программ некоторое количество промежуточных переменных необходимо, никогда не создавайте лишних. Промежуточные переменные есть смысл использовать тогда, когда применяемая формула является слишком длинной или сложной, и разбиение ее на логически осмысленные части позволит сделать программу более удобочитаемой и, следовательно, сведет к минимуму риск ввести формулу с ошибкой.
Во избежание неоднозначности употребляйте скобки. Порядок выполнения (приоритет) арифметических операций в разных языках программирования всегда является источником путаницы. Когда есть хоть какие-то сомнения, следует использовать дополнительные скобки, чтобы указать нужный порядок выполнения операций.
Будьте внимательны, используя константы как аргументы.
Рассмотрим пример на С++:
int simple_function(const int&, int);
int simple_function(const int& a, int b);
{
a = 1;//Компилятор выдаст ошибку! Нельзя изменять переменную a
return 0;
}
Располагайте только один оператор на строке. Размещение нескольких операторов на одной физической строке противоречит правилу структурированного программирования, требующему сдвигать оператор по строке в соответствии с уровнем его вложенности. Однако в языке Си возможны такие записи:
a = b = c = d;
(присвоение нескольким переменным одного и того же значения).
x = 2 * (a = 3 + b);
(выполнение присваивания в арифметическом выражении).
Логически они являются верными, но если первое выражение можно оставить, как логически понятное, то второе лучше записать в виде:
a = 3 + b
x = 2 * а;
Нe изменяйте значение параметра цикла в теле цикла. Изменение параметра цикла внутри цикла усложняет и понимание цикла, и доказательство того, что он не является «бесконечным».