确定在Java中使用哪个动词用于方法名称

时间:2011-08-22 17:50:49

标签: java methods naming-conventions

我理解命名约定很重要,原因有很多,大多数都与使代码更易读,更容易集成到更大的项目等有关。在Java中,大多数约定要求方法名称在{{1以动词开头。

我的问题是:如何选择动词来开始方法名称?

为了使这个问题不那么模糊,我常常处于这样一种情况,即我对方法名称的首选是描述输出的名词。在这些情况下,我通常会在名词的字体中添加诸如lowerCamelCasegetgenerate之类的通用动词,以符合动词规则。是否有何时使用哪些指南?

这是一个例子。我有一个方法,它采用calculatedouble[] array并返回int kdouble[] newArray的移动平均值为k,即array一些捏造使newArray[i] = (array[i-k+1]+...+array[i])/k长度与newArray相同。我倾向于调用这个方法array因为它返回的是什么,但是因为它不是以动词开头的,所以它已经出来了。我应该调用此方法movingAveragegetMovingAveragegenerateMovingAverage,还是不重要?

7 个答案:

答案 0 :(得分:29)

我经常问自己:

这个方法在做什么?

答案决定了应该调用哪种方法。当然,它完全独立于程序员。

注意:如果你不能简洁地描述该方法正在做什么,它可能做得太多而且应该分开。

选择你方法的动词:

  • 执行计算:计算
  • 检索数据:获取检索
  • 变异数据:设置更改
  • 删除数据:删除删除
  • 转换:转换
  • 发起操作:开始发起
  • 停止操作:停止取消

现在,并非所有方法都以动词开头;但他们真的不需要。如果您阅读:

... myString.length();

... myArray.size();

你确切知道发生了什么 - 不需要动词。对于Java层次结构中更高级的许多类方法都是如此;集合,数学等。只要名称准确地传达了方法的作用,就没问题了。

答案 1 :(得分:1)

不要忘记使用这个动词" is,has or can"对于布尔方法,例如: On(), Full(),依此类推。

答案 2 :(得分:0)

我的意见)如果对象没有状态(如数学库),则不需要方法名称中的动词。将 computeSquareRoot (x)和 getJoin (listOfStrings)与 squareRoot (x)和 join (listOfStrings)进行比较。< / p>

答案 3 :(得分:0)

正如你所说,正如我们在答案中所看到的,方法名称开头使用的动词几乎是相同的动词。我认为,如果花费相同的努力来编写相关文档,方法变得更容易理解和可积极性:)

我在阅读完问题后也意识到,我写的大多数方法都是从获取检索创建开始的。因此,似乎动词选择并不重要。

最佳

答案 4 :(得分:0)

我认为找到任何可以解决问题的“解决方案”,我们应首先提取在选择名称时起作用的标准,例如:

  • 可读性(平凡:getValue而不是transferValueFromThisObjectToYou)
  • 方便(琐碎:getCoordValue代替)
  • 方法的语义(get与计算不一样)
  • 使用环境(在IDE中我通常输入aaa.get_并按Ctrl + Space来检查我可以从对象中获取的内容)
  • 代码指南(或其他“指南”,如Java Bean约定,强制您使用某些名称)

...

然而,正如萨特所说 - 最好花一些时间在你的方法的文档上。

答案 5 :(得分:0)

我不认为java方法名称应该“以动词开头”,我认为它们应该描述动作。这通常需要动词,因为动词描述了动作。通常,它们是描述的重要部分(getVar和setVar意味着完全不同的东西)。偶尔,他们不会在描述中添加任何内容(除了get / calculate / generate之外,你能想到任何可以在movingAverage上运行的东西吗?)并且应该被删除。

答案 6 :(得分:0)

关于将getset方法用于属性访问器的操作仅 information hiding的重点是API的用户(即调用代码)不需要知道或取决于该属性是动态存储还是计算。只要API保持不变,实现就应该可以随时更改。

相关问题