Loops 循环迭代器命名约定

Loops 循环迭代器命名约定,loops,iterator,naming-conventions,Loops,Iterator,Naming Conventions,我们知道,不知何故,我们经常在循环中使用i和j变量。如果需要双for循环,则很可能会使用以下内容: for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { // do some stuff... } } for(int i=0;i在计算机视觉应用中看到嵌套循环并不少见,如其他所述,至少在字母顺序上没有约定,但通常人们倾向于使用字母i、j、k、l、m、n、q、h. 例如,这是用于过

我们知道,不知何故,我们经常在循环中使用
i
j
变量。如果需要双
for
循环,则很可能会使用以下内容:

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < m; j++)
    {
        // do some stuff...
    }
}
for(int i=0;i
但是,如果在这些循环中需要第三个
循环,则第三个迭代器没有任何命名约定。一、 可能使用以下变量:
r
k
ii
jj


第三个循环的迭代器(等等)有命名约定吗?

这些东西没有既定的约定
i
对于基本循环很好。对于更复杂的循环,或者在实现时不明显的地方,应该考虑明确命名迭代器,例如<代码> StutyEngult和 QueDist< <代码>,而不是<代码> I/C>和<代码> J

< p>在计算机视觉应用中看到嵌套循环并不少见,如其他所述,至少在字母顺序上没有约定,但通常人们倾向于使用字母i、j、k、l、m、n、q、h.

例如,这是用于过滤图像的二维离散卷积的可能实现:

/* The Input image I and Output image O have M*N pixels.  
 * The kernel H has size (2k+1)*(2k+1)
 */
for (i=k; i<M-k; i++) {
    for (j=k; j<N-k; j++) {
        temp=0;
        for (m=-k; m<=k; m++)
            for (n=-k; n<=k; m++)
                temp = temp + I[i-m,j-n] * H[m+k,n+k];
        O[i,j] = temp;
    }
}
/*输入图像I和输出图像O具有M*N像素。
*内核H的大小为(2k+1)*(2k+1)
*/

对于(i=k;i可读性最重要的事情应该是明显的名称
I和J不是最明显的,但对于简单的情况可能是好的。
static void Main(字符串[]args)
{
对于(int i=0;i<100;i++)
对于(int j=0;j<100;j++)
对于(int k=0;k<100;k++)
控制台写入线(“+i+”-“+j+”-“+k”);
}
vs

static void Main(字符串[]args)
{
对于(int survey=0;survey<100;survey++)
对于(int-question=0;question<100;question++)
对于(int option=0;option<100;option++)
Console.WriteLine(“+调查+”-“+问题+”-“+选项);
}
很容易看出哪一个更容易阅读。但是当我们在阅读的时候,如何让它更易读,同时消除你的命名问题

static void Main(string[] args)
{
    for(int survey = 0; survey < 100; survey++)
        PrintSurvey(survey);
}

private static void PrintSurvey(int survey)
{
    for (int question = 0; question < 100; question++)
        PrintQuestion(survey, question);
}

private static void PrintQuestion(int survey, int question)
{
    for (int option = 0; option < 100; option++)
        PrintOption(survey, question, option);
}

private static void PrintOption(int survey, int question, int option)
{
    Console.WriteLine("" + survey + "-" + question + "-" + option);
}
static void Main(字符串[]args)
{
对于(int survey=0;survey<100;survey++)
印刷测量(测量);
}
私人静态测量(内部测量)
{
对于(int-question=0;question<100;question++)
打印问题(调查,问题);
}
私人静态问题(内部调查,内部问题)
{
对于(int option=0;option<100;option++)
打印选项(调查、问题、选项);
}
私有静态void打印选项(整数调查、整数问题、整数选项)
{
Console.WriteLine(“+调查+”-“+问题+”-“+选项);
}

对于这个简单的循环来说,可能是杀伤力过大/冗长,只是想强调一点,有更多的方法可以解决嵌套循环的命名问题,而不仅仅是找到唯一的名称。

实际上我几乎从不使用I,我更喜欢像
cnt
,或者
index
,或者
id
。对于其中一个
cnt
仍然是短而快速的输入。当人们看到你的代码时,他们会立即知道它是什么,它是一个计数器,最重要的是,当你尝试使用搜索类似
“i”
的东西时,你会得到很多你不想看到的垃圾

include <iostream>

int main ()

//hi there, this is a comment

for (int i = 0; i < 5; i++)
包括
int main()
//你好,这里是评论
对于(int i=0;i<5;i++)
而如果您对索引使用
Ctrl+F
,而不是i,或者对cnt更是如此,您将只能看到您希望看到的内容,因此导航更舒适


对于更复杂的循环,尽管您肯定应该键入变量的全名,但您会感到困惑,否则

我真诚地认为,如果您有3个这样的嵌套循环,您应该考虑“重构”,而不是如何命名变量。逻辑将倾向于使用下一个字母(k)也就是说,@JoachimIsaksson有一个很好的观点
static void Main(string[] args)
{
    for(int survey = 0; survey < 100; survey++)
        PrintSurvey(survey);
}

private static void PrintSurvey(int survey)
{
    for (int question = 0; question < 100; question++)
        PrintQuestion(survey, question);
}

private static void PrintQuestion(int survey, int question)
{
    for (int option = 0; option < 100; option++)
        PrintOption(survey, question, option);
}

private static void PrintOption(int survey, int question, int option)
{
    Console.WriteLine("" + survey + "-" + question + "-" + option);
}
include <iostream>

int main ()

//hi there, this is a comment

for (int i = 0; i < 5; i++)