Я всегда использую понятное имя , если это не одноуровневый цикл, и переменная не имеет никакого значения кроме "количества раз, которым я был через этот цикл", в этом случае я использую i
.
При использовании понятных имен:
, Это может быть хитро для нахождения ошибки в этом вложенном цикле с помощью одних букв:
int values[MAX_ROWS][MAX_COLS];
int sum_of_all_values()
{
int i, j, total;
total = 0;
for (i = 0; i < MAX_COLS; i++)
for (j = 0; j < MAX_ROWS; j++)
total += values[i][j];
return total;
}
, тогда как это легче при использовании понятных имен:
int values[MAX_ROWS][MAX_COLS];
int sum_of_all_values()
{
int row_num, col_num, total;
total = 0;
for (row_num = 0; row_num < MAX_COLS; row_num++)
for (col_num = 0; col_num < MAX_ROWS; col_num++)
total += values[row_num][col_num];
return total;
}
row_num
? - отклоненные альтернативы В ответ на некоторые другие ответы и комментарии, это некоторые альтернативные предложения к использованию row_num
и col_num
и почему я принимаю решение не использовать их:
r
и c
: Это немного лучше, чем i
и j
. Я только рассмотрел бы использование их, если бы стандарт моей организации был для однобуквенных переменных, чтобы быть целыми числами, и также всегда быть первой буквой эквивалентного описательного имени. Система падала бы, если бы у меня было две переменные в функции, имя которой началось с "r", и удобочитаемость пострадала бы, даже если бы другие объекты, начинающиеся "r", появились где-нибудь в коде. rr
и cc
: Это выглядит странным мне, но я не привык к стилю переменной цикла двойной буквы. Если бы это был стандарт в моей организации тогда, я предполагаю, что это было бы немного лучше, чем [1 112] и c
. row
и col
: На первый взгляд это кажется более сжатым, чем [1 116] и col_num
, и столь же описательный. Однако я ожидал бы, что пустые существительные как "строка" и "столбец" будут относиться к структурам, объектам или указателям на них. Если row
мог бы означать или сама структура строки, или номер строки, то беспорядок закончится. iRow
и iCol
: Это передает дополнительную информацию, так как i
может означать, что это - счетчик цикла, в то время как Row
и Col
говорят Вам, что это считает. Однако я предпочитаю быть в состоянии считать код почти на английском языке: row_num < MAX_COLS
чтения как " цифра строки частота ошибок по битам [меньше чем 1 163] макс. imum (количество) седло umn s"; iRow < MAX_COLS
в лучшем случае чтения как " целочисленный счетчик цикла для строка [меньше чем 1 168] макс. imum (количество) седло umn s". альтернатива [1 126], который я принял бы, row_idx
: слово "индекс" исключительно относится к положению массива, если домен приложения не находится в дизайне механизма базы данных, финансовых рынках или подобен.
Мой пример выше является столь небольшим, как я мог сделать его, и как таковой, некоторые люди не могли бы видеть точку в именовании переменных описательно, так как они могут содержать целую функцию в голове сразу. В реальном коде, однако, функции были бы больше, и более сложная логика, таким образом, достойные имена становятся более важными, чтобы помочь удобочитаемости и избежать ошибок.
, Таким образом, моя цель со всем именованием переменной (не просто циклы) состоит в том, чтобы быть абсолютно однозначна . Если кто-либо чтения какая-либо часть моего кода и не может разработать то, для чего переменная сразу, то я перестал работать.
The built in Sum method does this already.
In VB it looks like this:
ProductList.Sum(Function(item) item.Cost)
In C# it looks like this:
ProductsList.Sum( (item) => item.Cost);
One way would be:
Dim s = (From p As Product In products Select p.Cost).Sum()