W Javie, zgodnie z konwencją, getter i setter dla pól logicznych będą isField()
i setField()
. To działa perfekcyjnie z nazwami pól, które są przymiotniki jak active
, visible
, closed
itp
Ale jak nazwać pole, które ma znaczenie czasownika, na przykład haveChildren
? Może dodać „_ing” do czasownika ( )?havingChildren
Aby to wyjaśnić, nie mam kontroli nad nazwami metod (getter i setter), ponieważ są one generowane automatycznie przez IDE. Potrzebuję więc odpowiedniej nazwy pola, aby gdy IDE wygenerowało dla niego getter, wyczuła. Na przykład, hasChildren
jest idealną nazwą pola, ale gdy IDE wygeneruje getter dla tego pola, będzie isHasChildren
. Jak to rozwiązać?
parent
zadziałałoby.Odpowiedzi:
Krótka odpowiedź:
Długa odpowiedź:
haveChildren()
powinien być nazwanyhasChildren()
.Nie uważam też
hasChildren()
za koniecznie pobierającego członka klasy boolowskiej. Wydaje mi się, że taka metoda sprawdzi, czy element typuCollection
jest pusty.Domyślna nazwa, którą IDE nadaje generowanym pobierającym i ustawiającym, nie ma być przypuszczalnym kamieniem.
Kolejna kwestia: interfejsy mają nazwy dla metod, które mają być jeszcze zaimplementowane.
Gdyby nazwy metod miały odzwierciedlać wewnętrzną implementację, jak ktoś mógłby kiedykolwiek zaprojektować interfejs? Interfejsy nie mają implementacji ani nie wiedzą z góry, co realizatorzy zrobią pod maską.
Weźmy na przykład
Iterator
interfejs w Javie.Po wdrożeniu
Iterator
, nawet jeśli masz nazwę booleannext
, nie masz prawa zmieniać nazwyhasNext()
naisNext()
lubisHavingNext()
. To szczegół implementacji. W rzeczywistości zaimplementowałemIterator
i to, co robię, to członek tego, co moja klasa ma listę, o nazwienext
(nie boolean).hasNext()
następnie wracanext!=null
.Zobacz także:
Zauważ, że
isDead()
to nie jest normalny getter.Weź narzędzia produktywności IDE takie, jakie są.
źródło
Proponuję zmienić nazwę pola, aby
parent
getter byłisParent
i seter będziesetParent
.Możesz także wypróbować
childPresent
nazwę zmiennejisChildPresent
orazsetChildPresent
jako getter i setter.źródło
parent
pole do przechowywania odwołania do obiektu nadrzędnego. Myślę, że potrzebuję ogólnej zasady konwertowania wszystkich czasowników na przymiotniki dla pól boolowskich.Możesz postawić
does
przed czasownikiem. Tak jakdoesHaveChildren
w przykładzie, który podałeś. A może wshouldHaveChildren
zależności od kontekstu.źródło
isSomething
jest częścią tej specyfikacji i wokół niego poczyniono wiele założeń, na lepsze lub gorsze, przeciwstawianie się temudoesSomething
może zepsuć rzeczy w nie tak oczywisty sposób, prowadząc do błędów.Pytanie jest całkowicie uzasadnione. Czasami zmiana nazwy metody generowanej automatycznie nie jest wystarczająca. Przykład: Oczekuje się, że fasole zarządzane JSF będą miały
isXyz()
metodę pobieraniaboolean xyz
właściwości.Zgadzam się z BlackPanther, który sugeruje zmianę nazwy pola
parent
i użycie goisParent
jako nazwy metody. Zgodnie z zasadą ukrywania informacji, czytelność i metody ustawiające są ważniejsze niż atrybutu.źródło