[英]Naming conventions for Java methods that return boolean
我喜歡在其他語言的方法/函數名稱末尾使用問號。 Java 不允許我這樣做。 作為一種解決方法,我還能如何在 Java 中命名布爾返回方法? 使用的is
, has
, should
, can
在好一些情況下,方法聲音的前端。 有沒有更好的方法來命名這些方法?
例如createFreshSnapshot?
約定俗成是問名字。
以下是一些可以在 JDK 中找到的示例:
isEmpty()
hasChildren()
這樣,名稱的讀法就像末尾有問號一樣。
集合是空的嗎?
這個節點有孩子嗎?
然后, true
表示是, false
表示否。
或者,您可以像斷言一樣閱讀它:
集合是空的。
該節點有孩子
注意:
有時您可能想將方法命名為類似createFreshSnapshot?
. 沒有問號,這個名字意味着該方法應該創建一個快照,而不是檢查是否需要一個快照。
在這種情況下,您應該重新考慮您實際詢問的內容。 像isSnapshotExpired
這樣的isSnapshotExpired
是一個更好的名稱,它傳達了該方法在被調用時會告訴您的信息。 遵循這樣的模式還可以幫助您保持更多的功能純凈且沒有副作用。
如果您在 Java API 中對isEmpty()
進行Google 搜索,您會得到很多結果。
如果您希望您的類與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);
我想發布此鏈接,因為它可能有助於進一步檢查此答案並尋找更多 Java 樣式約定的窺視者
條目“2.13是前綴應該用於布爾變量和方法。” 是特別相關的,並建議使用is前綴。
風格指南繼續建議:
在某些情況下,有一些更適合is前綴的替代方案。 這些是has , can和should前綴:
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
如果您遵循指南,我相信適當的方法將被命名為:
shouldCreateFreshSnapshot()
對於可能失敗的方法,即您指定 boolean 作為返回類型,我將使用前綴try
:
if (tryCreateFreshSnapshot())
{
// ...
}
對於所有其他情況,使用前綴如is..
has..
was..
can..
allows..
..
標准是使用is
或has
作為前綴。 例如isValid
、 hasChildren
。
is
我遇到的最多的一個。 不過,在當前情況下,任何有意義的事情都是最好的選擇。
我想對這個通用命名約定提出不同的觀點,例如:
參見java.util.Set : boolean add(E e)
理由是:
做一些處理然后報告它是否成功。
雖然return
確實是一個boolean
但方法的名稱應該指向要完成的處理而不是結果類型(本例中為布爾值)。
您的createFreshSnapshot
示例對我來說似乎與這個觀點更相關,因為似乎意味着:創建一個新快照然后報告創建操作是否成功。 考慮到這一推理,名稱createFreshSnapshot
似乎是最適合您的情況的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.