簡體   English   中英

返回布爾值的 Java 方法的命名約定

[英]Naming conventions for Java methods that return boolean

我喜歡在其他語言的方法/函數名稱末尾使用問號。 Java 不允許我這樣做。 作為一種解決方法,我還能如何在 Java 中命名布爾返回方法? 使用的ishasshouldcan在好一些情況下,方法聲音的前端。 有沒有更好的方法來命名這些方法?

例如createFreshSnapshot?

約定俗成是問名字。

以下是一些可以在 JDK 中找到的示例:

isEmpty()

hasChildren()

這樣,名稱的讀法就像末尾有問號一樣。

集合是空的嗎?
這個節點有孩子嗎?

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

或者,您可以像斷言一樣閱讀它:

集合是空的。
該節點有孩子

注意:
有時您可能想將方法命名為類似createFreshSnapshot? . 沒有問號,這個名字意味着該方法應該創建一個快照,而不是檢查是否需要一個快照。

在這種情況下,您應該重新考慮您實際詢問的內容。 isSnapshotExpired這樣的isSnapshotExpired是一個更好的名稱,它傳達了該方法在被調用時會告訴您的信息。 遵循這樣的模式還可以幫助您保持更多的功能純凈且沒有副作用。

如果您在 Java API 中對isEmpty()進行Google 搜索,您會得到很多結果。

如果您希望您的類與Java Beans 規范兼容,以便利用反射的工具(例如JavaBuildersJGoodies 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 樣式約定的窺視者

Java 編程風格指南

條目“2.13前綴應該用於布爾變量和方法。” 是特別相關的,並建議使用is前綴。

風格指南繼續建議:

在某些情況下,有一些更適合is前綴的替代方案。 這些是hascanshould前綴:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;

如果您遵循指南,我相信適當的方法將被命名為:

shouldCreateFreshSnapshot()

對於可能失敗的方法,即您指定 boolean 作為返回類型,我將使用前綴try

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

對於所有其他情況,使用前綴如is.. has.. was.. can.. allows.. ..

標准是使用ishas作為前綴。 例如isValidhasChildren

is我遇到的最多的一個。 不過,在當前情況下,任何有意義的事情都是最好的選擇。

我想對這個通用命名約定提出不同的觀點,例如:

參見java.util.Set : boolean add​(E e)

理由是:

做一些處理然后報告它是否成功

雖然return確實是一個boolean但方法的名稱應該指向要完成的處理而不是結果類型(本例中為布爾值)。

您的createFreshSnapshot示例對我來說似乎與這個觀點更相關,因為似乎意味着:創建一個新快照然后報告創建操作是否成功。 考慮到這一推理,名稱createFreshSnapshot似乎是最適合您的情況的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM