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

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

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

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

这是一个例子。 我有一个方法,它采用double[] array和一个int k并返回double[] newArray ,它是array的长度k移动平均值,即newArray[i] = (array[i-k+1]+...+array[i])/k用一些捏造使newArrayarray长度相同。 我的倾向是将这个方法movingAverage因为它返回的是那个,但是因为它不是以动词开头的。 我应该调用此方法getMovingAveragegenerateMovingAveragecalculateMovingAverage还是不重要?

我经常问自己:

这种方法做什么?

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

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

选择你方法的动词:

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

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

 ... myString.length(); 

要么

 ... myArray.size(); 

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

不要忘记使用这个动词“is,has or can”用于布尔方法,例如: is On(),Full()等等。

我的观点 )如果对象没有状态,你就不需要方法名中的动词,就像数学库一样。 将computeSquareRoot (x)和getJoin (listOfStrings)与squareRoot (x)和join (listOfStrings)进行比较。

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

我在阅读完问题后也意识到,我写的大部分方法都是从getretrievecreate开始的 。 因此,似乎动词选择并不重要。

最好

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

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

但是,正如suat所说 – 最好花一些时间在你的方法的文档上。

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