当前位置:  开发笔记 > 人工智能 > 正文

循环变量的理想变量命名约定是什么?

如何解决《循环变量的理想变量命名约定是什么?》经验,为你挑选了8个好方法。

如果您正在编写一个简单的小循环,那么您应该为计数器命名什么?

提供示例循环!



1> Paul Stephen..:

我总是使用一个有意义的名字,除非它是一个单级循环,并且变量除了"我经历过这个循环的次数"之外没有任何意义,在这种情况下我使用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:这对我来说很奇怪,但我不习惯双字母循环变量样式.如果它是我组织的标准,那么我想它会比r和更好一些c.

row并且col:乍一看,这似乎比row_num和更简洁col_num,并且只是描述性的.但是,我希望像"行"和"列"这样的裸名词能够引用这些结构,对象或指针.如果row可能意味着无论是该行结构本身,行号,那么混乱将导致.

iRow并且iCol:这传达了额外的信息,因为i它可以意味着它是一个循环计数器,RowCol告诉你它在计算什么.但是,我更喜欢能够几乎用英语阅读代码:

row_num < MAX_COLS读作"的行NUM BER是小于最大 imum(数)山口 UMN 小号 ";

iRow < MAX_COLS充其量读作"的整数循环计数器小于最大 imum(数)山口 UMN 小号 ".

这可能是个人的事情,但我更喜欢第一次阅读.

row_num我接受的另一种选择是row_idx:"index"一词唯一地指数组位置,除非应用程序的域位于数据库引擎设计,金融市场或类似领域.

我上面的例子就像我能做到的那样小,因此有些人可能没有看到描述性地命名变量的重点,因为他们可以一次性掌握整个函数.然而,在实际代码中,函数会更大,逻辑更复杂,因此正确的名称对于提高可读性和避免错误变得更加重要.

总之,我对所有变量命名(不仅仅是循环)的目标是完全明确的.如果有人读取我的代码的任何部分并且无法立即计算变量是什么,那么我就失败了.



2> m_pGladiator..:

1)对于普通的旧式小循环 - i,j,k - 如果你需要3级以上的嵌套循环,这意味着算法非常具体和复杂,要么你应该考虑重构代码.

Java示例:

for(int i = 0; i < ElementsList.size(); i++) {
  Element element = ElementsList.get(i);
  someProcessing(element);
  ....
}

2)对于新风格的java循环for(Element element: ElementsList),最好使用普通的meanigful名称

Java示例:

for(Element element: ElementsList) {
  someProcessing(element);
  ....
}

3)如果可以使用您使用的语言,请将循环转换为使用迭代器

Java Iterator示例:单击此处



3> Ande TURNER..:
例子:...在Java中


非迭代循环:


非嵌套循环:...指数是一个值.

...使用 i,就像在代数,是最常见的做法...

for (int i = 0; i < LOOP_LENGTH; i++) {

    // LOOP_BODY
}


嵌套循环:...区分指数有助于理解.

...使用描述性后缀...

for (int iRow = 0; iRow < ROWS; iRow++) {

    for (int iColumn = 0; iColumn < COLUMNS; iColumn++) {

        // LOOP_BODY
    }
}


foreach循环:...一个Object需要一个名字.

...使用描述性名称...

for (Object something : somethings) {

    // LOOP_BODY
}


迭代循环:


for循环:...迭代器引用对象.迭代器它既不是; 索引,也不是指数.

...iter 减少迭代器的目的...

for (Iterator iter = collection.iterator(); iter.hasNext(); /* N/A */) {

    Object object = iter.next();

    // LOOP_BODY
}


while循环:...限制迭代器的范围.

...评论循环的目的...

/* LOOP_DESCRIPTION */ {

    Iterator iter = collection.iterator();

    while (iter.hasNext()) {

        // LOOP_BODY
    }
}

最后一个例子没有评论就读得很糟糕,从而鼓励他们. 它可能很冗长,但在C中的范围限制循环中很有用.



4> just mike..:

我的经验是,大多数人使用单个字母,如: i, j, k,...或者 x, y或者 r, c(对于行/列),或者 w, h(对于宽/高),等等.

但是我很久以前就学会了一个很好的选择,并且从那时起就开始使用它:双字母变量.

// recommended style              ●    // "typical" single-letter style
                                  ●
for (ii=0; ii<10; ++ii) {         ●    for (i=0; i<10; ++i) {
    for (jj=0; jj<10; ++jj) {     ●        for (j=0; j<10; ++j) {
        mm[ii][jj] = ii * jj;     ●             m[i][j] = i * j;
    }                             ●        }
}                                 ●    }

如果利益不是很明显:在代码中搜索任何单个字母会发现许多不是您正在寻找的东西.这封信i经常出现在代码中,它不是您正在寻找的变量.


也许有点私事,但我真的不喜欢这个命名约定.我发现它很难看,令人困惑,而且难以理解.-1
如果你需要搜索你的迭代变量,那么它就是重构时间!
此外,为什么当它们不应该驻留在循环之外的任何地方时,你需要搜索循环变量?除非你之间有大量的代码 - 这不是一个好主意.
那太难看了!

5> Nescio..:

总是尝试将变量命名为有意义且在上下文中.

如果你不能决定,那么使用"索引",如果只是为了让其他人(也许你!)可以更容易点击它以便以后进行重构.

Paul Stephenson以一个例子来看这个答案.



6> petr k...:

我使用i,j,k(或r&c用于行列循环).如果在方法中需要三个以上的循环变量,则该方法可能太长且复杂,并且您的代码可能会从将方法拆分为更多方法并正确命名它们中获益.



7> AnthonyWJone..:

i

如果我有一个嵌套循环然后也j.

这个惯例是如此常见,如果你设法遇到i代码块中的变量,你看不到你的开始仍然立即识别它是什么.



8> Oddmund..:

我使用i,ii,iii,iv,v ......但是,从来没有比iii更高.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有