返回布尔值的Java方法的命名约定

返回布尔值的Java方法的命名约定,java,methods,naming-conventions,Java,Methods,Naming Conventions,我喜欢在其他语言的方法/函数名末尾使用问号。Java不允许我这样做。作为一种解决方法,在Java中如何命名布尔返回方法?在方法前面使用is,has,should,can在某些情况下听起来不错。有没有更好的方法来命名这些方法 例如createFreshSnapshot 惯例是以这个名字提问 以下是JDK中的几个示例: isEmpty() hasChildren() 这样的话,名字读起来就像在结尾有一个问号一样 集合是否为空? 这个节点有子节点吗 然后,true表示是,false表示否 或者,您

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


例如createFreshSnapshot

惯例是以这个名字提问

以下是JDK中的几个示例:

isEmpty()

hasChildren()
这样的话,名字读起来就像在结尾有一个问号一样

集合是否为空?
这个节点有子节点吗

然后,
true
表示是,
false
表示否

或者,您可以将其理解为一种断言:

集合为空。
该节点具有子节点

注意:
有时,您可能希望将一个方法命名为
createFreshSnapshot?
。如果没有问号,该名称意味着该方法应该创建快照,而不是检查是否需要快照

在这种情况下,你应该重新思考你实际上在问什么。类似于
isSnapshotExpired
的名称是一个更好的名称,它传达了调用该方法时该方法将告诉您的内容。遵循这样的模式也有助于保持更多功能的纯净和无副作用


如果在Java API中执行for
isEmpty()
,则会得到很多结果。

标准是使用
is
作为前缀。例如,
是有效的
有孩子
是我遇到最多的孩子。不过,在当前情况下有意义的是最好的选择。

如果希望类与兼容,以便使用反射(例如)的工具可以识别布尔getter,可以使用
getXXXX()
isXXXX()
作为方法名称。从Java Beans规范:

8.3.2布尔属性

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

公共布尔值是
()

可以提供此“is”方法而不是“get”方法,也可以在“get”方法之外提供此方法。在任何一种情况下,如果布尔属性存在“is”方法,那么我们将使用“is”方法读取属性值。布尔属性的一个示例可能是:

public boolean isMarsupial();
public void setMarsupial(boolean m);

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

if (tryCreateFreshSnapshot())
{
  // ...
}

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

我想发布此链接,因为它可能有助于PEEP进一步检查此答案并寻找更多java风格约定

项目“2.13 is前缀应用于布尔变量和方法。”特别相关,建议使用is前缀

《风格指南》继续建议:

在某些情况下,is前缀有几种更适合的替代方法。以下是has、can和should前缀:

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

shouldCreateFreshSnapshot()

我想就这一通用命名约定提出不同的观点,例如:

请参见:
boolean添加​(E)

其中理由是:

然后执行一些处理报告它是否成功

虽然
返回值
实际上是一个
布尔值
方法的名称应该指向要完成的处理,而不是结果类型(本例中为布尔值)


您的
createFreshSnapshot
示例对我来说似乎更符合这一观点,因为它的意思是:创建一个新的快照,然后报告创建操作是否成功。考虑到这个原因,名称
createFreshSnapshot
似乎最适合您的情况。

什么语言允许在方法名称中使用
?@SLaks,Scheme,Ruby…在Scheme中,我们总是在方法的末尾加上
p
name@Erick:不总是,但“p”是一种指定谓词的标准方法We=我的本科计划课程一直都是这样。我永远不会在Java中使用这个约定。createFreshSnapshot呢?@letr,嗯,我可能会将它重命名为lit
isSnapshotExpired
或类似的名称。(根据您的标准)我通过使用“应该”一词来回避“createFrshSnapshot”问题,即“shouldCreateFreshSnapshot()”(虽然在本例中isSnapshotExpired()更好)我检查心跳消息是否应该使用
shouldHeartbeat()
方法发送。为什么认为
isEmpty()
hasChildren()
是问题,不是断言?如果你把这些名称看作断言或谓词,它的英文读起来会稍微好一点它看起来像一个泛型。嘿,我只是引用规范。我将按照规范用斜体字表示。我不关心abt Java beans兼容性,我只希望我的方法名称听起来正确:)即使你不关心Java beans兼容性,命名约定也值得遵循,因为它已经超出了IDE中配置的“bean”的原始范围。例如,如果使用isEmpty作为方法名,则可以使用object.empty从JSP调用此方法,但不能使用其他前缀调用方法,因此不能使用object.children调用object.hasChildren()。因此JSP和EL(表达式语言)允许您访问Javabeans属性。如果你问我,这是一个巨大的胜利。JavaBeans非常具体,谢谢你提醒。我经常想知道,并倾向于认为我被“is”前缀卡住了,但事实并非如此。但try并没有传达出这是一个问题(有返回值)。永远不要返回
shouldCreateFreshSnapshot()