返回布尔值的Java方法的命名约定
我喜欢在其他语言的方法/函数名末尾使用问号。Java不允许我这样做。作为一种解决方法,在Java中如何命名布尔返回方法?在方法前面使用返回布尔值的Java方法的命名约定,java,methods,naming-conventions,Java,Methods,Naming Conventions,我喜欢在其他语言的方法/函数名末尾使用问号。Java不允许我这样做。作为一种解决方法,在Java中如何命名布尔返回方法?在方法前面使用is,has,should,can在某些情况下听起来不错。有没有更好的方法来命名这些方法 例如createFreshSnapshot 惯例是以这个名字提问 以下是JDK中的几个示例: isEmpty() hasChildren() 这样的话,名字读起来就像在结尾有一个问号一样 集合是否为空? 这个节点有子节点吗 然后,true表示是,false表示否 或者,您
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,嗯,我可能会将它重命名为litisSnapshotExpired
或类似的名称。(根据您的标准)我通过使用“应该”一词来回避“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()