Java是否鼓励使用单字母变量?在代码段或教程中,您经常会看到它们。我无法想象使用它们会受到鼓励,因为它使代码相对难以阅读,而且我从未见过将它们用于其他编程语言!
Java是否鼓励使用单字母变量?在代码段或教程中,您经常会看到它们。我无法想象使用它们会受到鼓励,因为它使代码相对难以阅读,而且我从未见过将它们用于其他编程语言!
Answers:
正确命名事物很难。很难。如果您以另一种方式看待它,则也可以认为正确命名的事物很重要。(否则,为什么要花点功夫命名呢?)
但是,有时候,事物的名称并不重要。例如,这就是为什么我们拥有诸如匿名函数(“ lambdas”)之类的东西的原因:因为有时仅仅为它们命名是不值得的。
有很多示例,其中单个字母(或非常短的)变量名是合适的:
i
,j
,k
,l
for循环指数k
以及v
地图中的键和值n
对于一个数字(例如Math.abs(n)
)a
,b
,c
对任意对象(例如,在max(a, b)
)e
对于通用for each
循环中的元素f
用于高阶函数中的函数p
用于过滤器中的谓词功能T
,T1
,T2
,...类型变量E
用于表示集合元素类型的类型变量R
用于表示函数结果类型的类型变量ex
对于catch
子句中的例外op
用于在地图或折叠中进行操作s
表示复数的字母,即集合(例如,ns
用于数字的集合,xs
以及ys
用于任意两个通用对象的集合)我从未见过它们被其他编程语言使用!
在我所知道的几乎每种语言中,它们都很常见(也可能在我所不知道的任何语言中)。Haskell,F#,ML,Ruby,Python,Perl,PHP,C#,Java,Scala,Groovy,Boo,Nemerle, D,Go,C ++,C,随便命名。
k
并l
处于循环索引中,那就太过分了(您不应该从那么多嵌套循环开始;将它们提取到函数中)。就个人而言,我从来没有使用超过每个函数一个1字母的变量,但我拍的0
l
或len
用于长度和arr
数组(例如:)for(var i=0; l=arr.length; i<l; i++)
。另外,当您引用一个函数时,fn
可以用代替f
。
如果循环不执行任何操作,但使用变量进行计数
for(int i = 0; i < 10; i++) {
System.out.println("Stop it! I really mean it!!");
}
那是的,这是您可以使用的最佳名称。更长的时间可能无法使语义变得更加明显,但需要花费更长的时间来阅读。
如果在循环内使用变量,则有意义的名称可能会有用。
for(int door = 0; door < 3; door++) {
int reward = gauge(door);
if(reward > max) {
max = reward;
best = door;
}
}
如果在方法范围内使用变量,则其名称应更长;如果在全班范围内使用它,则其名称最好完全不言自明,否则几乎可以肯定会降低代码的清晰度。
简而言之,变量的范围越大,其名称就必须越长。
index
在遍历数组时使用一个名为named的变量。
i
是一个具有精确定义含义的恰当单词,即“您不必担心太多的索引”。但是我想这是一个熟悉的问题。如果你读了很多哈斯克尔的,你会成为习惯于阅读m
的单子,f
如仿函数,x
如一些对象,xs
如清单x
小号等等。
i
仅使用变量进行计数的循环,我并不认为这是“您可以使用的最佳名称”。在这种情况下,我宁愿将count
用作变量名:立即可以理解。for (int count = 0; count < 10; count++)
或while (count--)
。
阅读Kilian的答案中的代码,我不认为“存在一个循环,并且存在一个变量,它的类型为int,它的名称为,名称为i,并且初始化为0 ,。” ..”。我只是认为“循环...”中的三个点代表了我什至没有想到的不重要的细节。在我的程序员看来,该变量实际上并不存在,这只是我必须键入的伪像,例如for(;;){}使其成为循环。
由于该变量在我的脑海中甚至不存在,为什么我要给它起一个绝对必要的名称呢?
i
,而是_
使用显然毫无意义的变量。但是并不是每个人都熟悉Prolog,它可能会吸引更多的关注,而不是消除它。
_
是一个合法的标识符,但与Ruby 一样,最近发生的变化是,即使Ruby通常会警告未使用的局部变量_
(或以开头_
)也不会生成“未使用的局部变量”警告。
如果您将字母i,j,k称为循环中的索引,则这是Java和其他编程语言中的常见做法。虽然在那里最好为每个样式循环使用a,例如
for(User user: users) {
doSomethingWithTheUser(user);
}
代替
for(int i=0; i<users.size(); i++) {
doSomethingWithTheUser(users.get(i));
}
在Java中,这种循环样式只是最近才引入的。这可能就是为什么您对Java更为注意的原因,因为循环索引曾经是循环数组或列表的最常见方法。
在其他一些情况下,可能适合使用单个字母,例如在实现数学功能时,可能已经很常见了单个字母(例如n,x或y)。但总的来说,不,将变量命名有意义。