【发布时间】:2026-01-14 05:35:01
【问题描述】:
我知道命名约定很重要,原因有很多,主要是为了使您的代码更易读,更容易集成到更大的项目中,等等。在 Java 中,大多数约定要求方法名称在 lowerCamelCase以动词开头。
我的问题是:如何选择方法名开头的动词?
为了使这个问题不那么含糊,我经常遇到这样的情况:方法名称的首选是描述输出的名词。在这些情况下,我通常会在名词字体中附加通用动词(如get、generate、calculate 等)以符合动词规则时感到困惑。是否有关于何时使用哪个的一般准则?
这是一个例子。我有一个方法,它采用double[] array 和一个int k 并返回double[] newArray,这是k 的长度array,即newArray[i] = (array[i-k+1]+...+array[i])/k 与一些捏造使newArray 与@ 相同的长度987654332@。我的倾向是调用这个方法movingAverage,因为它返回的是这个方法,但是因为它不是以动词开头的,所以就没有了。我应该将此方法称为getMovingAverage 或generateMovingAverage 或calculateMovingAverage 还是无关紧要?
【问题讨论】:
-
在我看来,命名约定不是“法律”,因此虽然您应该尝试以动词开头的方法名称,但我看不出您不能以它开头的原因一个名词,如果它具有足够的描述性(
movingAverage非常具有描述性)。不要忘记,虽然现在人们并没有真正抱怨过长的方法名称,但我会选择movingAverage而不是computeMovingAverage任何一天。顺便说一句,我想不出一个不通用的动词,在编程方面更是如此。 -
即使是原生 java 方法也不会盲目地遵循“第一个词是动词”的约定。例如
Collection#size()、Collection#toArray()。如果您觉得它足够清楚,我会说随意使用movingAverage()[并且没有人可能认为它意味着别的]。 -
@amit 标准 Java 库不是一个很好的例子,它是高度不一致的 - 例如一些类有一个
length()方法,其他有一个getLength()方法,有些甚至有 getter 和 setter具有相同名称的方法(例如ByteBuffer.position()获取位置和ByteBuffer.position(int)设置位置 - 我不鼓励你这样命名你的方法!)。 -
@Link 动词中还有有用的信息。当您必须执行(可能很长)计算工作时,将使用 computeMovingAverage - getMovingAverage 意味着仅检索已经计算的值。
-
@DJClayworth 这是一个非常好的观点。将它与 Evan 的动词摘要结合起来,给了我一个很好的指导。谢谢。
标签: java methods naming-conventions