我什么时候可以使用短变量名称?

时间:2013-08-31 14:26:27

标签: code-readability

我经常发现人们强调使用变量名来恰当准确地描述变量试图传达的内容。一两句话通常也很难做到这一点。我发现虽然较长的名称通常被接受,但它们通常会导致代码因为混乱而更难以阅读。我发现,一旦我理解了变量所传达的内容,这个名称只是该理解的别名,而名称本身并不一定有所作为。在这种情况下,我个人几乎总是喜欢较短的名字而不是较长的名字。

使用短变量名称是否合适?在不查看算法或类的其余部分的情况下使用不一定理解的名称是否可接受,但是可能在声明变量或算法开头时对其进行评论?或者,通常总是更喜欢使用更长的名称来立即明确地传达意义?

4 个答案:

答案 0 :(得分:3)

对我来说,简短(读隐藏)的名字只有一个地方可口; foreach 循环中的索引变量。

我认为这只是因为多年来因为 i,j,k 等而对索引变量的接触...而且这通常是因为循环体足够短以便看到使用并在同一页面中声明。

总的来说,花一点时间为上下文创建一个有意义的名称,然后使用它!

答案 1 :(得分:2)


longer范围变量具有 - should具有更长和更具描述性的名称


短范围

List<String> result = new ArrayList<String>();
for(String c: cities){
    if(c.contains("CO")){
        result.add(c);
    }    
}

很清楚c的含义。由于c范围较短,您可以快速获得它。

长期范围

让我们看一下克隆方法的HashSet实现:

private transient HashMap<E,Object> map;
...

public Object clone() {
        try {
            HashSet<E> newSet = (HashSet<E>) super.clone();
            newSet.map = (HashMap<E, Object>) map.clone();
            return newSet;
        } catch (CloneNotSupportedException e) {
            throw new InternalError();
        }
    } 

如果map被命名为m,那么很容易理解m是什么(不考虑m声明)?

答案 2 :(得分:1)

  

在不查看算法或类的其余部分的情况下使用未必理解的名称是否可接受,但是可能在声明变量或算法开头时对其进行评论?

我现在正在阅读Clean Code并根据本书(我认为这是一个很好的参考)评论代码是错误的代码。您应该只在必要时使用注释。好的代码注释本身,所以我想如果变量的更长名称描述了你想在算法中实现什么 - 使用它们。

答案 3 :(得分:1)

名称应与其范围一样长或短 - 引用鲍勃叔叔自由和内存。因此,在循环中保持简短,在类范围的变量中应该是冗长的。特别是在API中,名称应该是直观的,而且与其他名称一致!

不要对大范围变量的含义进行评论并将其缩写。这导致读者稳定的翻译工作。