2

我经常发现人们强调使用适当且准确地描述变量试图传达的内容的变量名称。这通常也很难用一两句话来完成。我发现确实,虽然较长的名称通常更容易被接受,但它们往往会导致代码的可读性更差,因为仅仅是混乱。我发现,一旦我理解了变量所传达的含义,名称只是该理解的别名,名称本身并不一定会产生影响。在这种情况下,我个人几乎总是更喜欢较短的名称而不是较长的名称。

使用短变量名是否合适?是否可以使用在不查看算法或类的其余部分的情况下不一定能理解的名称,但可能在变量声明或算法开始时对其进行注释?还是通常总是最好使用更长的名称来立即明确地传达含义?

4

4 回答 4

3

对我来说,简短(读起来很神秘)的名字只在一个地方很受欢迎;forforeach循环中的索引变量。

我认为这只是因为多年来一直接触到i、j、k等 for 索引变量……而这通常是因为循环体足够短,可以在同一页面中看到使用和声明。

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

于 2013-08-31T14:31:57.173 回答
2

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


短范围

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

很清楚是什么c意思。由于c范围短,您可以快速了解它的内容。

长范围

让我们看一下clone方法的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声明)?

于 2013-08-31T14:31:34.580 回答
1

是否可以使用在不查看算法或类的其余部分的情况下不一定能理解的名称,但可能在变量声明或算法开始时对其进行注释?

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

于 2013-08-31T14:34:30.997 回答
1

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

不要用它们的含义注释大范围变量并缩写它们。这会引起读者的稳定翻译工作。

于 2013-08-31T14:36:55.743 回答