我喜欢在其他语言中使用方法或函数名末尾的问号。Java不允许我这样做。作为解决办法,在Java中如何命名返回布尔值的方法?在方法前使用is
,has
,should
,can
对于一些情况听起来还可以。是否有更好的方法来命名这样的方法?
例如:createFreshSnapshot?
我喜欢在其他语言中使用方法或函数名末尾的问号。Java不允许我这样做。作为解决办法,在Java中如何命名返回布尔值的方法?在方法前使用is
,has
,should
,can
对于一些情况听起来还可以。是否有更好的方法来命名这样的方法?
例如:createFreshSnapshot?
惯例是用名称提出问题。
以下是可以在JDK中找到的几个例子:
isEmpty()
hasChildren()
这样一来,变量名就像在末尾有一个问号。
集合是否为空?
此节点是否有子节点?
那么,true
意味着 "是",false
意味着 "否"。
或者,您可以将其视为断言:
集合为空。
节点有子节点。
注意:
有时您可能希望将方法命名为类似 createFreshSnapshot?
的名称。没有问号,则该名称意味着该方法应创建快照,而不是检查是否需要快照。
在这种情况下,您应该重新考虑自己的问题。例如 isSnapshotExpired
是更好的名称,并传达了调用方法时该方法将向您提供的信息。遵循此模式还可以帮助保持更多函数纯净,无副作用。
如果您在 Java API 中进行 Google搜索 来查找 isEmpty()
,则会得到大量结果。
shouldHeartbeat()
的方法来检查是否需要发送心跳消息。 - Erick RobertsonisEmpty()
和 hasChildren()
是“问题”,而不是“断言”?如果你把这些名称看作是断言或谓词,那么在英语中它实际上读起来更好一些。 - rickassertIsEmpty()
和assertHasChildren()
。 - Steven PribilinskiygetXXXX()
或isXXXX()
作为方法名称。根据Java Beans规范:
8.3.2 Boolean properties
In addition, for boolean properties, we allow a getter method to match the pattern:
public boolean is
<PropertyName>()
;This “is<PropertyName>” method may be provided instead of a “get<PropertyName>” method, or it may be provided in addition to a “get<PropertyName>” method. In either case, if the “is<PropertyName>” method is present for a boolean property then we will use the “is<PropertyName>” method to read the property value. An example boolean property might be:
public boolean isMarsupial(); public void setMarsupial(boolean m);
public boolean is<PropertyName>();
的时候确实有些让人困惑,看起来像是一个泛型。 - Erick Robertson我想分享这个链接,因为它可能有助于查看此答案并寻找更多Java风格约定的人。
其中“2.13项目 是 应该用于布尔变量和方法。” 特别相关,并建议使用is前缀。
该样式指南继续建议:
有几个替代方案可以取代is前缀,适用于某些情况。 这些前缀是has、can和should:
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
如果您遵循指南,我相信适当的方法应该被命名为:
shouldCreateFreshSnapshot()
对于可能失败的方法,即返回类型为布尔值的方法,我会使用前缀try
:
if (tryCreateFreshSnapshot())
{
// ...
}
对于所有其他情况,请使用前缀 is..
、has..
、was..
、can..
、allows..
等。
canCreateFreshSnapshost()
的方法,只有在调用成功后才调用一个名为 createFreshSnapshot
的方法,如果它意外失败,则可能返回异常。 - Ladislav Ondris通常使用 is
或 has
作为前缀。例如,isValid
,hasChildren
。
is
是我遇到的最常见的单词。但在当前情况下,最好的选择是符合逻辑的选项。
我希望对这个通用的命名约定提出不同的观点,例如:
参见 java.util.Set:boolean add(E e)
其中的原理是:
进行一些处理,然后 报告 是否成功。
虽然 return
确实是一个 boolean
,但方法的名称应该指向完成处理而不是结果类型(在此示例中为布尔值)。
您的 createFreshSnapshot
示例似乎更相关于这个观点,因为它似乎意味着:创建一个新快照,然后报告创建操作是否成功。考虑到这种推理,createFreshSnapshot
的名称似乎是您的情况下最好的选择。
?
? - SLaksp
。 - Erick Robertson