可能重复:
Is a variable named i unacceptable?
What is an ideal variable naming convention for loop variables?
来自C背景我总是使用int i
作为泛型循环变量。当然,在大型嵌套循环或其他复杂的东西中,我可能会使用一个描述性的名称但你更喜欢看哪一个?
int i;
for(i=0;i<Controls.Count;i++){
DoStuff(Controls[i]);
}
或
int index;
for(index=0;index<Controls.Count;index++){
DoStuff(Controls[index]);
}
在我正在进行的当前项目中,这两种样式和索引都被ndx
取代。
哪一个更好? i
变量是否过于通用?还有其他C风格的名字呢? i, j, k
所有这些都应该被实际的描述性变量所取代吗?
答案 0 :(得分:14)
i
在第一个循环方面非常标准,内部循环后跟j
,内部循环后跟k
,依此类推。 / p>
与几乎所有的命名规则一样,只要它是项目中的标准规则,并且适用于所有成员,那就没关系。
答案 1 :(得分:8)
如果可能的话,我会赞成描述性名称,因为我们应该努力寻找可读代码。
对于紧密代码块中使用的临时变量,可以接受短变量名称。
但是如果循环或代码块很长,最好有一个更长的描述性变量名称,如果没有其他原因,它会使文本搜索更容易。
答案 2 :(得分:5)
如果要使用嵌套循环来访问多维数组元素,则必须使用描述性迭代器名称来创建自我注释代码。 例如,
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]);
}
}
答案 3 :(得分:4)
短变量名称很棒,但它们的范围应该很小。他们应该遵守语言的惯例。直到今天,我的Haskell和ML代码将具有函数值变量f
,g
和h
以及monadic计算m
,unnknown类型的变量{{ 1}}和a
,以及未知元素类型b
和as
的列表。但这些变量的范围将仅限于短函数或bs
子句。
我的C代码将包含名为where
,i
,j
,p
,q
和s
的变量。但是这些变量的范围将局限于单个循环(所有赞美C99和C ++反向移动!)或短函数。无论是循环索引还是其他变量,大范围内出现的内容都会获得更长的名称。
答案 4 :(得分:3)
我经常使用单字母变量作为计数器。 这是我如何循环,详尽地使用字母表中的字母:
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]);
}
}
}
}
}
}
}
}
}
答案 5 :(得分:3)
项目可见性的范围应该决定需要的名称的描述性。
如果你确实有一个微小的循环,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
。
我相信在实用程序员中,他们说你不应该使用缩写,因为人们永远不会知道使用什么缩写。我知道我想要一个名为index
的东西,所以我输入index
但是我收到编译错误。怎么办? (通过代码搜索,发现它写的ndx
会打扰我。)
当我试着考虑它时,关于我使用的唯一不是游戏特定的缩写是'num'代表'numberOf'。除此之外,我使用'npc'表示非玩家角色,'ai'表示人工智能等等,有时我使用小块的缩写,例如在相机上运行的10行功能可能只称它为“凸轮”,但范围很小,因此很容易看出发生了什么,并且混淆的可能性有限。
范围小 - &gt;做你喜欢的事(只要有一定的一致性)。大范围 - &gt;使您的名字明确,有意义且易于输入。 (通过“易于打字”我的意思是“容易记住如何拼写”以及“不要过分”。)
答案 6 :(得分:2)
在命名时,一切都与清晰度有关。我会说大多数看代码的人都知道“int i”是某种索引,但他们可能认为这是一种普通的老式用法。因此,如果它做了一些聪明的事情(即不仅仅是简单的计数),你应该把它称为使事实清楚的东西。
答案 7 :(得分:1)
如果它是小块,并且没有嵌套for循环,我很好,这几乎是不成文的规则,只要它出现,我就是一个循环增量变量。在更复杂的一切中,良好的命名至关重要。
答案 8 :(得分:1)
就个人而言,我使用i,j而不是循环变量,当语言允许时,我倾向于尝试使用为每个 - 我发现它更好。
答案 9 :(得分:1)
当我解析像位图这样的二维对象时,我经常使用x
和y
。
for (int (y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
// work
}
}
答案 10 :(得分:0)
我从不使用单字母变量名称,原因很简单 - 您是否曾尝试在文件或多个文件中搜索某个变量的所有出现?最好使用一些不那么模糊和更易搜索的东西。