我喜欢用其他语言在方法/函数名称的末尾使用问号。Java不允许我这样做。作为一种解决方法,我还能如何用Java命名布尔返回方法?使用is
,has
,should
,can
在好一些情况下,方法声音的前端。是否有更好的方法来命名此类方法?
例如,createFreshSnapshot?
p
在方法名的末尾
我喜欢用其他语言在方法/函数名称的末尾使用问号。Java不允许我这样做。作为一种解决方法,我还能如何用Java命名布尔返回方法?使用is
,has
,should
,can
在好一些情况下,方法声音的前端。是否有更好的方法来命名此类方法?
例如,createFreshSnapshot?
p
在方法名的末尾
Answers:
惯例是用名字问一个问题。
以下是在JDK中可以找到的一些示例:
isEmpty()
hasChildren()
这样,读取名称的方式就像在末尾加一个问号一样。
收藏集是否为空?
这个节点有孩子吗?
然后,true
是,是,false
不是。
或者,您可以像断言一样阅读它:
集合为空。
该节点有孩子
注意:
有时您可能想为方法命名,例如createFreshSnapshot?
。如果没有问号,该名称意味着该方法应该创建快照,而不是检查是否需要快照。
在这种情况下,您应该重新考虑您的实际要求。诸如此类的isSnapshotExpired
名字更好,它传达了该方法在调用时将告诉您的内容。遵循这样的模式还可以帮助保持更多的功能纯净而没有副作用。
如果你做一个谷歌搜索的isEmpty()
Java API中,你会得到很多结果。
isSnapshotExpired
或类似的名称。(根据您的条件)
shouldHeartbeat()
方法发送心跳消息。
isEmpty()
和hasChildren()
是问题,而不是断言?如果您将这些名称视为断言或谓词,它的英文阅读实际上会稍微好一些。
如果您希望您的类与Java Beans规范兼容,以便利用反射的工具(例如JavaBuilders,JGoodies Binding)可以使用getXXXX()
或isXXXX()
作为方法名称来识别布尔型getter 。根据Java Beans规范:
8.3.2布尔属性
另外,对于布尔属性,我们允许使用getter方法来匹配模式:
public boolean is
< PropertyName >()
;可以提供此“ is < PropertyName >”方法来代替“ get < PropertyName >”方法,或者可以是“ get < PropertyName >”方法的补充。在任一情况下,如果“是< 属性名 >”的方法是存在用于一个布尔属性然后,我们将使用“是< 属性名 >”方法来读取的属性值。布尔属性的示例可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);
public boolean is<PropertyName>();
看起来像通用名称时,这很令人困惑。
我想发布此链接,因为它可能进一步帮助窥视者检查此答案并寻找更多的Java样式约定
项目“ 2.13 是布尔变量和方法应使用前缀”。特别相关,并建议is前缀。
样式指南继续建议:
在某些情况下,可以使用is前缀代替一些前缀。这些是具有,可以并且应该前缀:
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
如果您遵循准则,我相信适当的方法将被命名为:
shouldCreateFreshSnapshot()
对于可能失败的方法,即您将布尔值指定为返回类型,我将使用前缀try
:
if (tryCreateFreshSnapshot())
{
// ...
}
对于所有其他情况,请使用is..
has..
was..
can..
allows..
..之类的前缀。
我想对此通用命名约定提出不同的看法,例如:
参见java.util.Set:boolean add(E e)
理由是:
做一些处理然后 报告 是否成功。
尽管return
确实是boolean
方法名称,但方法名称应指向要完成的处理,而不是结果类型(此示例为布尔值)。
createFreshSnapshot
对我来说,您的示例似乎与这种观点更为相关,因为这似乎意味着:创建新快照,然后报告创建操作是否成功。考虑到这种推理,该名称createFreshSnapshot
似乎是适合您情况的最佳名称。
?
方法名称中允许使用哪种语言?