интервал i по сравнению с международным индексом и т.д. Какой лучше? [дубликат]

11
задан Community 23 May 2017 в 12:18
поделиться

11 ответов

i , однако, довольно стандартен с точки зрения первого цикла, за которым следует j для внутреннего цикла и k для внутренний-внутренний цикл и так далее.

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

14
ответ дан 3 December 2019 в 01:20
поделиться

Если это небольшой блок и нет вложенных циклов for, с i все в порядке, почти такое же неписаное правило, что i - это инкрементная переменная цикла всякий раз, когда она появляется. Во всем более сложном очень важно хорошее нейминг.

1
ответ дан 3 December 2019 в 01:20
поделиться

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

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

Но если цикл или блок кода очень длинный, лучше иметь более длинное описательное имя переменной, хотя бы по той причине, что это упростит поиск по тексту.

8
ответ дан 3 December 2019 в 01:20
поделиться

Когда дело доходит до наименования, все дело в ясности. Я бы сказал, что большинство людей, которые смотрят код, знают, что «int i» - это своего рода индекс, но они, вероятно, предполагают, что это обычное старое использование. Так что, если он делает что-то умное (то есть не просто подсчет), вы должны назвать это как-нибудь, чтобы прояснить этот факт.

2
ответ дан 3 December 2019 в 01:20
поделиться

Объем видимости элемента должен определять, насколько информативным должно быть имя .

Если у вас буквально есть крошечный цикл, i, j и k - прекрасные и типичные счетчики индексов. Иногда более описательное имя может помочь прояснить намерение, но если цикл for настроен следующим образом, то более описательное имя не имеет значения.

for (int i = 0; i < totalCount; ++i)
{
   Thing& myThing = things[i];

   // do stuff with myThing, never refer to i again
}

Тем не менее, сокращения никогда не должны использоваться, если они не используются последовательно. Я лично считаю ndx ужасным идентификатором, потому что его трудно набрать; Я отлично печатаю по-английски, и моя скорость программирования не ограничивается моей скоростью набора. Если вы хотите указать индекс , скажите индекс .

Я считаю, что именно в «Программисте-прагматике» говорится, что не следует использовать сокращения, потому что тогда люди никогда не узнают, какое сокращение использовать. Я знаю, что мне нужна вещь под названием index , поэтому я набираю index , но получаю ошибку компилятора. Что теперь? (Просмотрите код и обнаружите, что он написан ndx меня беспокоит.)

Пока я пытаюсь обдумать это, единственное сокращение, которое я использую, не зависит от игры, - это «число». вместо "numberOf". Помимо этого, я использую npc для обозначения неигрового персонажа, ai для обозначения искусственного интеллекта и т. Д. И т. Д., А иногда я использую сокращения в небольших блоках, например 10-строчная функция, работающая с камерой, может называться просто «камерой», но область действия небольшая, поэтому легко увидеть, что происходит, и возможность путаницы ограничена.

Так- малый объем -> делайте все, что хотите (пока есть некоторая последовательность). Большой объем -> сделайте ваши имена однозначными, значимыми и удобными для ввода. (Под «легко печатать» я имею в виду «легко запомнить, как писать», а также «не переусердствуйте».)

3
ответ дан 3 December 2019 в 01:20
поделиться

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

1
ответ дан 3 December 2019 в 01:20
поделиться

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

for(int i=0;i<someMax;i++){ 
  for(int j=0;j<someOtherMax;j++){ 
    DoStuff(someArray[i,j]); 
  }
} 

vs.

for(int row=0;row<someMax;row++){ 
  for(int column=0;column<someOtherMax;column++){ 
    DoStuff(someArray[row,column]); 
  }
} 
5
ответ дан 3 December 2019 в 01:20
поделиться

Короткие имена переменных хороши , но они должны иметь небольшую область действия. И они должны соблюдать условности языка. До первого дня в моем коде Haskell и ML будут функциональнозначные переменные f , g и h , а также монадические вычисления m . ], переменные неизвестного типа a и b , а также списки неизвестных типов элементов как и bs . Но область действия этих переменных будет ограничена короткими функциями или предложениями where .

В моем коде C будут переменные с именами i , j , p , q , s , и t . Но область действия этих переменных будет ограничена отдельными циклами (все хвалят C99 и бэкпорты C ++!) Или короткими функциями. Будь то индекс цикла или другая переменная, то, что появляется в большой области видимости, получает более длинное имя.

4
ответ дан 3 December 2019 в 01:20
поделиться

Я часто использую однобуквенные переменные в качестве счетчиков. Вот как я зацикливаюсь, исчерпывающе использую буквы в алфавите:

for (int i = 0, l = array.length; i < l; i ++) {
  for (int j = 0, m = array[i].length; j < m; j ++) {
    for (int k = 0, n = array[i][j].length; k < n; k ++) {
      for (int o = 0, p = array[i][j][k].length; o < p; o ++) {
        for (int q = 0, r = array[i][j][k][o].length; q < r; q ++) {
          for (int s = 0, t = array[i][j][k][o][q].length; s < t; s ++) {
            for (int u = 0, v = array[i][j][k][o][q][s].length; u < v; u ++) {
              for (int w = 0, x = array[i][j][k][o][q][s][u].length; w < x; w ++) {
                for (int y = 0, z = array[i][j][k][o][q][s][u][w].length; y < z; y ++) {
                  f(array[i][j][k][o][q][s][u][w][y]);
                }
              }
            }
          }
        }
      }
    }
  }
}
3
ответ дан 3 December 2019 в 01:20
поделиться

Я часто использую x и y для случаев, когда я анализирую какой-либо двумерный объект, например растровое изображение.

for (int (y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {
        // work
    }
}
1
ответ дан 3 December 2019 в 01:20
поделиться

Я никогда не использую однобуквенные имена переменных по одной простой причине - пробовали ли вы когда-нибудь искать все вхождения определенной переменной в файле или в нескольких файлах? Лучше использовать что-нибудь менее двусмысленное и более доступное для поиска.

0
ответ дан 3 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

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