VB.NET запрос LINQ: получение суммы всех значений для определенного элемента структуры

Я всегда использую понятное имя , если это не одноуровневый цикл, и переменная не имеет никакого значения кроме "количества раз, которым я был через этот цикл", в этом случае я использую 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: слово "индекс" исключительно относится к положению массива, если домен приложения не находится в дизайне механизма базы данных, финансовых рынках или подобен.

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

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

19
задан Matthew Murdoch 25 October 2012 в 10:06
поделиться

2 ответа

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);
41
ответ дан 30 November 2019 в 02:56
поделиться

One way would be:

Dim s = (From p As Product In products Select p.Cost).Sum()
4
ответ дан 30 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: