Lubię używać znaku zapytania na końcu nazw metod / funkcji w innych językach. Java mi na to nie pozwala. Jako obejście, jak inaczej mogę nazwać logiczne metody zwracające w Javie? Korzystanie z is
, has
, should
, can
z przodu dźwięk metoda dobrze dla niektórych przypadkach. Czy jest lepszy sposób na nazwanie takich metod?
Na przykład createFreshSnapshot?
java
methods
naming-conventions
letronje
źródło
źródło
?
w nazwie metody?p
na końcu nazwy metodyOdpowiedzi:
Konwencja polega na zadawaniu pytania w imieniu.
Oto kilka przykładów, które można znaleźć w JDK:
W ten sposób nazwiska są odczytywane tak, jakby miały na końcu znak zapytania.
A zatem
true
oznacza tak ifalse
oznacza nie.Możesz też przeczytać to jak stwierdzenie:
Uwaga:
czasami możesz chcieć nazwać metodę podobną do
createFreshSnapshot?
. Bez znaku zapytania nazwa sugeruje, że metoda powinna tworzyć migawkę, zamiast sprawdzać, czy jest wymagana.W takim przypadku powinieneś przemyśleć, o co tak naprawdę prosisz. Coś w rodzaju
isSnapshotExpired
jest o wiele lepszą nazwą i przekazuje to, co powie ci metoda, gdy zostanie wywołana. Postępowanie według takiego schematu może również pomóc w utrzymaniu większej liczby funkcji w czystości i bez skutków ubocznych.Jeśli do wyszukiwarki Google dla
isEmpty()
w API Javy, można uzyskać wiele wyników.źródło
isSnapshotExpired
lub coś w tym stylu. (na podstawie twoich kryteriów)shouldHeartbeat()
metodą.isEmpty()
ihasChildren()
są to pytania , a nie twierdzenia ? W rzeczywistości czyta się nieco lepiej po angielsku, jeśli myślisz o tych nazwach jako o asercjach lub predykatach.Jeśli chcesz, aby Twoja klasa była zgodna ze specyfikacją Java Beans , tak aby narzędzia wykorzystujące odbicie (np. JavaBuilders , JGoodies Binding ) mogły rozpoznawać boolowskie metody pobierające , użyj
getXXXX()
lubisXXXX()
jako nazwy metody. Ze specyfikacji Java Beans:źródło
public boolean is<PropertyName>();
wygląda jak rodzajowy.Chcę opublikować ten link, ponieważ może to jeszcze bardziej pomóc użytkownikom sprawdzającym tę odpowiedź i szukającym bardziej konwencji w stylu java
Wskazówki dotyczące stylu programowania w języku Java
Punkt „2.13 to przedrostek powinien być używany dla zmiennych i metod boolowskich”. jest szczególnie istotne i sugeruje przedrostek is .
Przewodnik po stylu sugeruje:
boolean hasLicense(); boolean canEvaluate(); boolean shouldAbort = false;
Jeśli zastosujesz się do Wytycznych, uważam, że odpowiednia metoda będzie nazwana:
źródło
W przypadku metod, które mogą się nie powieść, to znaczy określasz wartość logiczną jako typ zwracany, użyłbym przedrostka
try
:if (tryCreateFreshSnapshot()) { // ... }
We wszystkich innych przypadkach użyj przedrostków, takich jak
is..
has..
was..
can..
allows..
...źródło
Standardowo używa się przedrostka „jest” lub „ma”. Na przykład
isValid
,hasChildren
.źródło
is
to ten, z którym się spotykałem częściej niż jakikolwiek inny. Cokolwiek ma sens w obecnej sytuacji, jest jednak najlepszą opcją.źródło
Chcę wskazać inne spojrzenie na tę ogólną konwencję nazewnictwa, np .:
zobacz java.util.Set :
boolean add(E e)
gdzie uzasadnieniem jest:
wykonaj pewne przetwarzanie, a następnie zgłoś, czy się powiodło, czy nie .
Chociaż
return
rzeczywiście jestboolean
to nazwa metody, powinna wskazywać na zakończenie przetwarzania zamiast typu wyniku (boolean w tym przykładzie).Twój
createFreshSnapshot
przykład wydaje mi się bardziej związany z tym punktem widzenia, ponieważ wydaje się oznaczać to: utwórz nową migawkę, a następnie zgłoś, czy operacja tworzenia zakończyła się powodzeniem. Biorąc pod uwagę to rozumowanie, nazwacreateFreshSnapshot
wydaje się być najlepsza dla twojej sytuacji.źródło