返回布尔值的java方法的命名约定(无问号)

let*_*nje 88 java methods naming-conventions

我喜欢在其他语言的方法/函数名称末尾使用问号.Java不允许我这样做.作为一种解决方法,我如何在Java中命名布尔返回方法?使用is,has,should,can在方法的前声好一些情况.有没有更好的方法来命名这样的方法?

例如createFreshSnapshot?

jjn*_*guy 111

惯例是在名称中提出问题.

以下是一些可以在JDK中找到的示例:

isEmpty()

hasChildren()
Run Code Online (Sandbox Code Playgroud)

这样,读取的名称就像他们最后会有一个问号一样.

集合是空的吗?
这个节点有孩子吗?

然后,true意味着是,并且false意味着没有.

或者,您可以像断言一样阅读它:

收集是空的.
该节点有孩子

注意:
有时您可能想要命名一个类似的方法createFreshSnapshot?.如果没有问号,名称意味着该方法应该创建快照,而不是检查是否需要.

在这种情况下,您应该重新考虑您实际要求的内容.类似的东西isSnapshotExpired是一个更好的名字,并传达了方法在调用时会告诉你的内容.遵循这样的模式也可以帮助您保持更多的功能纯净,没有副作用.

如果你做一个谷歌搜索isEmpty()Java API中,你会得到很多结果.

  • 我通过使用'should'这个词来解决'createFrshSnapshot'问题 - 即"shouldCreateFreshSnapshot()"(尽管在这种情况下isSnapshotExpired()更好) (7认同)
  • @letr,好吧,我可能会重命名它点亮`isSnapshotExpired`或类似的东西.(根据您的标准) (4认同)

Jas*_*n S 29

如果您希望您的类与Java Beans规范兼容,那么使用反射的工具(例如JavaBuilders,JGoodies Binding)可以识别布尔getter,使用getXXXX()isXXXX()作为方法名称.来自Java Beans规范:

8.3.2布尔属性

另外,对于布尔属性,我们允许getter方法匹配模式:

public boolean is< PropertyName > ();

可以提供此"is < PropertyName >"方法而不是"get < PropertyName >"方法,或者除了"get < PropertyName >"方法之外还可以提供它.在任何一种情况下,如果布尔属性存在"is < PropertyName >"方法,那么我们将使用"is < PropertyName >"方法来读取属性值.布尔属性的示例可能是:

public boolean isMarsupial();
public void setMarsupial(boolean m);
Run Code Online (Sandbox Code Playgroud)

  • 我不关心abt Java bean兼容性,我只想让我的方法名称听起来正确:) (4认同)
  • 即使你不关心Javabeans的兼容性,命名约定值得遵循,因为它已经超出了IDE中配置的'beans'的原始范围.例如,如果使用isEmpty作为方法名称,则可以使用object.empty从JSP调用此方法,但是不能使用其他前缀调用方法,因此不能使用object.children来调用object.hasChildren().因此,JSP和EL(表达式语言)允许您访问Javabeans属性.如果你问我,这是一个很大的胜利. (4认同)

kom*_*mer 24

我想发布这个链接,因为它可能有助于进一步窥视检查这个答案,并寻找更多的Java风格约定

Java编程风格指南

第14项是特别相关的,暗示前缀.

风格指南继续建议:

is前缀有一些替代方案,在某些情况下更适合.这些都是,可以应该前缀:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
Run Code Online (Sandbox Code Playgroud)

如果您遵循指南,我相信适当的方法将被命名为:

shouldCreateFreshSnapshot()
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,有指导方针是版权所有Geotechnical Software Services.也就是说,他们在底部引用了来源,表明他们是合法的. (2认同)

cod*_*nix 12

对于可能失败的方法,即你将boolean指定为返回类型,我会使用前缀try:

if (tryCreateFreshSnapshot())
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

对于所有其他情况使用前缀,如is.. has.. was.. can.. allows....

  • 但尝试并没有传达这是一个问题(有一个回报值). (14认同)
  • 切勿返回布尔值来指示方法是否失败。如果该方法失败,则抛出异常。想象一下该方法失败并且您得到错误,您将如何确定到底出了什么问题? (2认同)

Bil*_*hor 5

标准是使用'is'或'has'作为前缀.例如isValid,hasChildren.