为什么Java方法名不应包含下划线?

4

我正在使用PMD检查Java编码违规。我正在编写自动化测试用例,并给出了以下方法名称:

public void testCaseMethod_4_2_16(){
   //some implementation 
}

4.2.16是测试用例编号为4.2.16。

当我检测PMD违规时,它显示方法名不应包含下划线,并且根据PMD规则,此违规显示为阻止程序继续执行的错误

  • 为什么方法名不应该包含下划线被定义为阻止程序继续执行的错误PMD错误
  • 我们应该避免哪种PMD违规?
  • 我们应该尝试修复哪种违规?

据我理解,我们至少应该避免PMD显示的前两个级别的违规。 欢迎对PMD规则提供任何帮助。谢谢。


我不知道为什么,但我总是使用驼峰命名法来命名方法和下划线来命名变量。为什么呢?这样更容易区分变量和方法。 - vallentin
@Vallentin,方法末尾的大括号不足以表示吗? - Andy
2
@Vallentin 变量中的下划线仅用于 FINAL_VARIABLE_NAMES!除此之外,这只是一种“约定俗成”的做法(原命名约定文档已经不存在,但可以参考 http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html 获取示例)。 - Marco13
@Marco13中,“final variables”通常被称为“常量”(在Java中)。 - Andy
@Sanjay,我认为你是正确的。我也经常在测试中使用下划线来使名称更易读。顺便说一句:我认为添加测试用例的名称比添加编号更有意义。当你只添加测试用例编号时,你需要查看测试文档才能了解测试的内容。 - Andy
显示剩余4条评论
4个回答

8

这是一个标准,让人们可以轻松地阅读彼此的代码,从而使代码更易于维护。

以下引用来自Oracle关于Java代码规范的网站:

  • 软件的80%寿命周期成本用于维护。

  • 几乎没有任何软件由原始作者一直维护。

  • 代码约定提高了软件的可读性,使工程师能够更快速、全面地理解新代码。


4
+1 表示对“80% 终身成本”的赞同。这是关于软件说过的最明智的话之一。 - Joshua

5
Java更喜欢使用驼峰命名法。Java代码约定指出,尽可能避免在方法或变量名称中使用下划线。
在你的情况下,PMD的默认优先级不适用。这个规则应该是“可选”的级别,但绝对不是一个阻碍问题。
我建议你使用SonarQube,它重新优化了PMD的规则,在大多数情况下工作得更好。你发现的规则只是主要级别(低于阻止和关键级别)。

Naming Conventions rule in Sonar

如果您对结果仍然不满意,您可以使用SonarQube的SourceMeter插件,它具有不同(可能更好)的PMD规则优先级。

3

虽然有很多不同的观点,但我喜欢将生产质量保证和测试代码的质量保证分开。

如果由于某些原因无法分开,我宁愿为测试代码禁用(大部分)警告。我认为花时间使测试代码变得漂亮(方法名称中的下划线只是样式问题),而在生产代码中仍有严重的警告留下来是不值得的。


是的,我告诉审阅者应该忽略它。但他的问题是为什么它被声明为阻塞器,你应该有一个有效的理由。 - Sanjay
有两个原因:1)这是测试代码;2)它只涉及样式。对我来说,这些都是合理的论点,而且我也经常进行代码审查。如果PMD默认为“blocker”,那么在我看来它被错误地分类了。(想要检查PMD主页上的默认设置,但目前无法访问...) - Andy
但这些是他们给出的规则集,如果我更改了他们的PMD规则集,是否适当的方式是更改默认规则集并根据我们的使用进行修改。那么检查PMD违规的用途是什么呢? - Sanjay

0

在Java中,允许在标识符命名时使用下划线。我不知道为什么PMD会显示违规,但您可以只是停用警告并继续进行。在Java中,允许在标识符命名时使用下划线。

我认为这可能会对您有所帮助...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接