Czy istnieje konwencja nazewnictwa wyliczeń w Javie?
Wolę, aby wyliczenie było rodzajem. Na przykład masz wyliczenie
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
Jestem przeciwny nadaniu jej nazwy:
FruitEnum
NetworkConnectionTypeEnum
Rozumiem, że łatwo jest wybrać, które pliki są wyliczeniami, ale wtedy miałbyś również:
NetworkConnectionClass
FruitClass
Czy jest też dobry dokument opisujący to samo dla stałych, gdzie je zadeklarować itp.?
java
standards
coding-style
Walter White
źródło
źródło
Odpowiedzi:
Wyliczenia są klasami i powinny być zgodne z konwencjami dla klas. Wystąpienia wyliczenia są stałymi i powinny być zgodne z konwencjami dla stałych. Więc
Nie ma powodu, aby pisać FruitEnum bardziej niż FruitClass. Po prostu marnujesz cztery (lub pięć) znaków, które nie dodają żadnych informacji.
Sama Java zaleca to podejście i jest używane w ich przykładach .
źródło
Prawdopodobnie nie przyniesie mi to wielu nowych przyjaciół, ale należy dodać, że ludzie w C # mają inne wytyczne: Instancje enum to „przypadek Pascala” (mieszane duże / małe litery). Patrz dyskusja stackoverflow i MSDN Typ wyliczenia Naming wytyczne .
Kiedy wymieniamy dane z systemem C #, kusi mnie, aby dokładnie skopiować ich wyliczenia, ignorując konwencję Java „stałe mają wielkie litery”. Myśląc o tym, nie widzę wielkiej wartości w ograniczeniu do wielkich liter w przypadkach wyliczania. Do niektórych celów .name () jest przydatnym skrótem do uzyskania czytelnej reprezentacji stałej wyliczeniowej, a nazwa mieszanej wielkości liter wyglądałaby ładniej.
Tak, śmiem kwestionować wartość konwencji nazewnictwa enum Java. Fakt, że „druga połowa świata programowania” rzeczywiście używa innego stylu, sprawia, że uważam za uzasadnione wątpić w naszą własną religię.
źródło
Jak już wspomniano, wystąpienia enum powinny być pisane wielkimi literami zgodnie z dokumentami na stronie Oracle ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ).
Jednak przeglądając samouczek JavaEE7 na stronie Oracle ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ) natknąłem się na samouczek „Księgarnia Duke'a” i na zajęciach (
tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java
), Znalazłem następującą definicję wyliczenia:Zgodnie z konwencjami powinien on wyglądać następująco:
Wygląda więc na to, że nawet faceci z Oracle czasami handlują konwencją z łatwością.
źródło
W naszej bazie kodu; zazwyczaj deklarujemy wyliczenia w klasie, do której należą.
Na przykład w przypadku Owoców mielibyśmy klasę Owoców, a wewnątrz niej Enum zwane Owocami.
Odwoływanie się do niego w kodzie wygląda następująco:
Fruit.Fruits.Apple, Fruit.Fruits.Pear
itd.Stałe podążają wzdłuż tej samej linii, gdzie albo zostają zdefiniowane w klasie, do której są istotne (więc coś podobnego
Fruit.ORANGE_BUSHEL_SIZE
); lub jeśli dotyczą całego systemu (tj. równoważnej „wartości zerowej” dla liczb całkowitych) w klasie o nazwie „ConstantManager” (lub równoważnej; podobnejConstantManager.NULL_INT
). (uwaga dodatkowa; wszystkie nasze stałe są wielkie)Jak zawsze, twoje standardy kodowania prawdopodobnie różnią się od moich; więc YMMV.
źródło
Lists
iMaps
. Moim zdaniem jest to dobra konwencja i w pełni popieram jej szersze zastosowanie.Fruit.Fruits.Apple
jest dla mnie zbyt gadatliwy, dosłownie łamiąc zasadę SUCHEGO :-) Wolałbym npFruit.Type.APPLE
.Nadal są typami, więc zawsze używam tych samych konwencji nazewnictwa, których używam dla klas.
Zdecydowanie zmarszczyłbym brwi z powodu nadania nazwy „Class” lub „Enum”. Jeśli masz zarówno A
FruitClass
iFruitEnum
A, coś innego jest nie tak i potrzebujesz bardziej opisowych nazw. Próbuję pomyśleć o rodzaju kodu, który prowadziłby do potrzebowania obu. Wydaje się, że powinna istniećFruit
klasa podstawowa z podtypami zamiast wyliczenia. (Ale to tylko moje spekulacje, możesz mieć inną sytuację niż sobie wyobrażam.)Najlepsze odniesienie, jakie mogę znaleźć dla nazw stałych, pochodzi z samouczka Zmienne :
źródło
Jeśli mogę dodać moje 0,02 $, wolę używać PascalCase jako wartości wyliczeniowych w C.
W C są one zasadniczo globalne, a PEER_CONNECTED staje się naprawdę męczący w przeciwieństwie do PeerConnected.
Powiew świeżego powietrza.
Dosłownie sprawia, że oddycham łatwiej.
W Javie można używać nieprzetworzonych nazw wyliczeniowych, o ile importujesz je statycznie z innej klasy.
Teraz możesz używać niekwalifikowanych nazw, które już zakwalifikowałeś w inny sposób.
Obecnie myślę o przeniesieniu kodu C na Javę i „rozdartym” między wyborem konwencji Java (która jest bardziej szczegółowa, dłuższa i bardziej brzydka) a moim stylem C.
PeerConnected stałby się PeerState.CONNECTED, z wyjątkiem instrukcji switch, gdzie jest CONNECTED.
Teraz jest wiele do powiedzenia na temat tej drugiej konwencji i wygląda ona ładnie, ale pewne „idiomatyczne frazy”, takie jak
if (s == PeerAvailable)
stają się podobneif (s == PeerState.AVAILABLE)
i nostalgiczne, jest to dla mnie utrata znaczenia.Wydaje mi się, że nadal wolę styl Java ze względu na przejrzystość, ale z trudem patrzę na krzykliwy kod.
Teraz zdaję sobie sprawę, że PascalCase jest już szeroko stosowany w Javie, ale bardzo mylące, tak naprawdę nie byłoby, tylko odrobinę nie na miejscu.
źródło
jest (w przybliżeniu) jak powiedzenie
więc myślę, że wszystkie czapki są ściśle poprawne, ale nadal używam konwencji nazw klas, ponieważ nienawidzę wszystkich czapek gdziekolwiek
źródło