Wikipedia 上的“命名约定”页面包含 Java 约定下的以下声明:
应避免使用单字符变量名称,临时“一次性”变量除外。
在成为单字符名称的可接受候选者之前,变量需要有多“临时”?
显然,这将基于意见,但这里有一些注意事项。
for 循环中的索引或其他需要索引的东西。小范围很重要。除了 for 循环,我还编写了代码来完成 SQL 语句,例如
int idx = 0;
ps.addInt(idx++, userId);
ps.addString(idx++, userName);
ps.addString(idx++, userEmail);
但即使在那种情况下,我也觉得idx
比i
. 作为维护者,idx
告诉我作者的真正意思是索引。 i
告诉我作者可能指的是索引,或者可能不擅长命名变量,我必须多阅读代码才能消除歧义。
当然,像这样的特性foreach
已经解决了这样一个事实,即这是相当样板,并且该语言不应该需要一次性变量,我相信 C++11 现在支持。
请注意,单字母变量有一些愚蠢但相当相关的考虑,即grep
难以查找、难以搜索和替换等。如果您从 IDE 开发,这不太重要,但如果您甚至有机会不会,那么这更重要。如果grep
您使用i
而不是ii
.
所以这些考虑说,我坚定的意见是:
永远不要使用一个字母的名字。至少做两个。仅在所有使用该语言编写代码的开发人员都知道需要一次性使用的地方使用它们。我能想到的仅有的两个例子是for
循环和rc
用于 C 中的返回代码。在 Java 或 C++11 中,如果您发现自己使用了一个字母一次性,那么请更好地设计您的代码,因为有一些语言特性可以避免这种情况。
我只在少数情况下使用单字母名称:
x
和 等坐标y
。for
变量是块作用域并命名为i
, j
, k
, ...E
元素、K
键、V
值等。在所有其他情况下,我使用更长的名称。随着时间的推移,我发现自己放弃了以前使用的较短的表格。我什至很少缩写了。我可以快速打字,而且真正的单词比缩写更容易输入。
childCount
titleNormalizer
colorLoader
这使得一年后我需要搜索用途和修改代码时变得容易得多。