К выбору имен переменных нужно подходить ответственно. Неудачно выбранное название переменной может создать у читателя ошибочное представление о ее назначении и привести к неправильному пониманию логики программы.
square
(площадь), чем var103
(неизвестно что).
vv
сначала содержит
объем, потом вес, а потом высоту, то это запутает и читателя, и вас. Некоторые программисты пытаются так делать для экономии памяти, но в этом нет никакого смысла.
Объявление новой переменной "бесплатно". Если старая переменная не
используется в программе, то компилятор может автоматически связать с ней новое имя, то есть никакого лишнего использования памяти не произойдет.
_
. Например, piece_value
. i
, j
, k
и др. не следует использовать кроме как в циклах.coll
(две буквы L) и col1
(буква L и цифра 1). #define
, перечисления enum
.
int buffer[256];
// ...
void process_command(int command) {
switch(command) {
case 1:
for(int k = 0; k < 256; k++)
buffer[k] = 0;
break;
case 2:
if(buffer[0] == 0) {
// ...
}
}
}
#define BUFFER_SIZE 256
typedef enum {CMD_CLEAR = 1, CMD_PRINT = 2} CommandType;
// ...
int buffer[BUFFER_SIZE];
// ...
void process_command(CommandType command) {
const int blank_value = 0;
switch(command) {
case CMD_CLEAR:
for(int k = 0; k < BUFFER_SIZE; k++)
buffer[k] = blank_value;
break;
case CMD_PRINT:
if(buffer[0] == blank_value) {
// ...
}
}
}
Посмотрим на исходный вариант этого фрагмента программы (плохой).
Здесь используются константы 256
, 0
, 1
и 2
для обозначения
длины массива buffer
, начального значения элемента этого массива, команды ОЧИСТИТЬ и команды ПЕЧАТЬ, соответственно.
Может ли читатель, глядя на левый код, догадаться, что константа 1
означает команду ОЧИСТИТЬ? Без анализа кода – нет.
Можно ли сказать, какие значения допустимы для параметра command
функции process_command
? Без анализа кода этого не сделать,
так как аргумент объявлен целочисленным. Какой смысл имеет константа 0
, которая четыре раза появляется в этом коде?
Улучшенный вариант этого фрагметна отличается следующим. Во-первых, размер буфера определен директивой #define
. В случае необходимости изменения
размера буфера это можно сделать исправив одну строчку – директиву #define
. Изменение будет автоматически применено во всех местах,
где используеся имя BUFFER_SIZE
.
В исходном варианте программы потребовалось бы просмотреть весь ее код и заменить 256
на новое значение. В общем случае константа 256 может
появляться много раз и в нескольких смыслах, так что заменять нужно только некоторые вхождения, что обычно является причиной возникновения
сложно обнаруживаемых ошибок, когда в некоторых местах программы остается старое значение.
Во-вторых, для обозначения команд введен тип-перечисление CommandType
. Это позволяет объявить формальный параметр функции с правильным типом,
который допускает только два значения, и использовать символьные имена CMD_CLEAR
и CMD_PRINT
вместо соответствующих числовых констант.
В-третьих, "пустому" значению 0
присвоено явное символьное обозначение blank_value
. Это дает возможность читателю понять смысл
константы 0
.