Wiem, że w Javie konwencja dotycząca metody pobierającej wartości logiczne obejmuje przedrostek „jest”.
isEnabled
isStoreOpen
Ale co, jeśli temat jest w liczbie mnogiej? To znaczy, co jeśli zamiast chcieć wiedzieć, czy sklep jest otwarty, chciałem wiedzieć, czy wszystkie sklepy są otwarte?
isStoresOpen()
nie ma sensu po angielsku.
Kusi mnie, żeby napisać gettery takie jak:
areStoresOpen
areDogsCute
areCatsFuzzy
I myślę, że miałoby sens, ale powiedziano mi przez innych, że należy po prostu ssać go i porzucenia tematu czasownika umowy i użytkowania isStoresOpen
, isDogsCute
, isCatsFuzzy
.
W każdym razie, co powinienem zrobić dla boolowskich metod pobierających, które działają w liczbie mnogiej?
java
naming-conventions
boolean
kodai
źródło
źródło
are*()
gettera.are*()
gettery, jeśli są poprawne gramatycznie.is
lubhas
...Odpowiedzi:
Nie pamiętam, z której książki to pochodzi, ale najważniejsze jest to, że kod będzie czytany znacznie więcej razy, niż jest napisany. Napisz dla czytelności.
źródło
storesAreOpen()
prawdopodobnie byłaby najbardziej gramatyczna (z powoduif(storesAreOpen())
), ale logiczna część nazwy jest teraz ukryta w środku nazwy metody, co łamie konwencje języka Java i czytelny kod.Co powiesz na dość przyzwoity angielski i zgodny ze standardem Java:
isEveryStoreOpen()
lubisEachCatCute()
W razie wątpliwości co do właściwego słowa zawsze lubię trafiać w tezaurus.
źródło
boolean
sis
konwencję prefiksu. Dodatkowo zawiera trochę dodatkowych informacji, które będą naprawdę przydatne dla tych, dla których angielski nie jest językiem ojczystym, którzy są opiekunami bazy kodu.Konwencja jest taka, aby poprzedzać metodę pobierającą znakiem „is”, a nie samą zmienną.
na przykład
private boolean enabled; public boolean isEnabled() { return enabled; }
i
private boolean storesOpen; public boolean isStoresOpen() { return storesOpen; }
Może nie mieć sensu gramatycznie, ale jest zgodne z konwencją i wygląda wystarczająco czytelnie.
źródło
Specyfikacja Java Bean mówi, że ma być używana
get
dla metod pobierających, chyba że jestboolean
to użycie następnieis
.are
jest niestandardowy i nie zostanie rozpoznany przez nic, co wymaga standardowego nazewnictwa Bean.źródło
Wiele narzędzi oczekuje
is
lubget
prawdopodobnie nie rozpoznaare
.Spróbuj je przeformułować, na przykład
getDogsAreFuzzy()
lubgetStoresAreOpen()
lub coś takiego, aby uzyskać lepszą zgodność i konwencje.źródło
-
isEnabled()
można również zapisać jakogetEnabled()
wJava naming conventions
.- To po prostu dobry nawyk, aby przestrzegać konwencji nazewnictwa, pomagać podczas pracy
Java Beans
.źródło
Ogólnie uważam, że kod powinien być tak czytelny, jak to tylko możliwe, aby metoda mogła być prawie odczytywana jako akapit (co jest zgodne z
Clean Code
). Dlatego nazwałbym metodę tak, aby brzmiała / czytała tak łatwo, jak to możliwe, i postępowała zgodnie z regułą gramatykiare
. Dzięki nowoczesnym IDE łatwo jest znaleźć metody bez szukania konkretnieget
/is
.Jednak Kumar ma rację co do fasoli. Wiele narzędzi będzie szukać tylko
get
/is
. W takim przypadku mógłbym rozważyć użycie obu metod. Jeden dla łatwości czytania, a drugi dla użycia narzędzi.źródło
W jakim języku piszesz: angielski czy Java ?
Kiedy czytam kod Javy, spodziewam się, że coś tam będzie, zmuszając mnie do wyszukiwania obu metod pobierających, z prefiksami is i are , będzie bardziej skomplikowane niż wyszukiwanie tylko jednego prefiksu.
Jednak z drugiej strony, kiedy rano czytam gazetę, niczego nie szukam, więc możesz pisać bardziej tradycyjnym językiem angielskim.
return 0;
źródło
W swoim pytaniu wyraźnie pytasz o metody pobierające. Funkcja pobierająca zwraca pewne informacje o jednej instancji Twojej klasy. Na przykład masz klasę
Store
. ToisStoreOpen
doskonała nazwa metody dla metody pobierającej.Następnie wspomnij o metodzie, która sprawdza, czy wszystkie sklepy są otwarte. Ta metoda w ogóle nie pobiera, ponieważ nie zwraca informacji o jednej instancji, ale o wszystkich. Oczywiście, chyba że jest klasa
Stores
. W takim przypadku powinieneś przemyśleć swój projekt, ponieważ Java ma już sposoby na przechowywanie wielu instancji, np. Tablic lub kolekcji, więc nie musisz pisać dodatkowych klas.Jeśli tak nie jest, nazwa metody jest w porządku. Alternatywą może być po prostu
allStoresOpen
„jest”.TL; DR: Jeśli masz do czynienia z wieloma instancjami, nie jest to metoda pobierająca. Jeśli tak, twój projekt jest zły.
źródło
Całkiem szczerze powiedziałbym, że zdecydowanie zapomnij o tym
are*
i trzymaj sięis*
. Pomyśl o tym"is"
jako o znaczeniu zmiennej i utwórz lepszą nazwę, jeśli to możliwe.Powiedziałbym, że isStoresOpen nie brzmi tak źle, ale możesz sprawić, że isStoresAreOpen będzie dla ciebie lepsze.
Ale moim ogólnym zamysłem byłoby trzymanie się konwencji. Który używa „get” dla pobierających i „is” dla typów boolowskich. Osobiście uważam, że używanie słowa „jest” jest już czasami problematyczne. Tak - wygląda dobrze w warunkach „jeśli”, ale czasami po prostu piszę „get” podczas kodowania i sprawdzam listę rozwijaną pod kątem mojej potrzebnej zmiennej i zaczynam się zastanawiać, co jest nie tak i dlaczego nie mogę tego znaleźć, a potem zdaję sobie z tego sprawę zaczyna się od „jest” ...
źródło
W programowaniu obiektowym powinno to rzadko, jeśli w ogóle, mieć miejsce od tego czasu
Store
lubCat
lub co mieć powinny być oddzielne klasy, z własnymisOpen()
lubisFuzzy()
metody. Jeśli masz wyższy typ, rozważ podzielenie się na bardziej atomowy poziom, którego faktycznie używasz. Ogólnie rzecz biorąc, na najniższym poziomie obiekty nie powinny występować w liczbie mnogiej.źródło
isStoresOpen () w tym StoresOpen wygląda jak liczba mnoga,
Kiedy przestrzegasz Konwencji nazewnictwa Java i standardów Java Beans, mają one predefiniowane przedrostki dla typów logicznych i innych, dlatego należy postępować zgodnie z konwencją nazewnictwa Java Beans.
Przejdźmy do twojego punktu Kiedy widzisz sklepyOtwarte tak, jak w perspektywie angielskiej, tak, wygląda to na liczbę mnogą. Jeszcze raz weź głęboką obserwację w to słowo,
Tutaj
storeOpen jest w liczbie mnogiej zgodnie z gramatyką angielską,
Wynik isStoresOpen nie jest liczbą mnogą, zamiast tego jest liczbą pojedynczą lub można powiedzieć, że jest skalarny z punktu widzenia konwencji programowania.
Wychodzi, że jest logiczna, po prostu prawda lub fałsz
Nie tak, jak twoje angielskie stwierdzenie liczby mnogiej prawda lub fałsz
Nie jest tablicą prawdy lub fałszu ani też kolekcjami prawdy lub fałszu
Więc tutaj możemy powiedzieć, że tutaj chodzi o wartość, która jest zwracana z tej metody ziaren boolean, a nie nazwę nadaną właściwości class, która wskazuje byt ze świata rzeczywistego.
Ważną rzeczą jest jeszcze jedno: ilekroć takie właściwości boolowskie są używane w klasach i są używane przez predefiniowane biblioteki w dowolnym frameworku, to framework z prefiksem użycia „ is ” służy do pobierania wartości boolowskich,
dlaczego oznacza, że nie jest tak mądrzejszy od ciebie, jak znasz gramatykę angielską, taką jak liczba mnoga / liczba pojedyncza, multiplekser itp.
źródło