Konwencja nazewnictwa Java z akronimami [zamknięte]

218

Jaka jest poprawna nazwa następującej klasy Java: DVDPlayerlub DvdPlayer?

DD
źródło
93
Nienawidzę skrótów. DigitalVersatileDiscPlayerjest droga naprzód.
Tom Hawtin - tackline
7
+1 Tomowi za żart. Uważam to pytanie za pomocne, jeśli „poprawne” jest interpretowane jako „standardowe” lub „najbardziej typowe”. Przyjęta odpowiedź jest świetna!
Jon Coombs
6
Dla mnie sensowne jest myślenie o takich akronimach jak o jednym słowie i jako takie przestrzegam konwencji i używam ich DvdPlayer.
Daniel
7
Przewodnik po stylu ma o tym do powiedzenia: „Sformatuj skrót jako słowo, jeśli jest ono częścią dłuższej nazwy klasy”. , tak DvdPlayerjest droga. (I, dla Toma, „Używaj całych słów i unikaj używania skrótów, chyba że skrót jest częściej używany niż długa forma”. Myślę, że „DVD” jest częściej używane niż „Digital Versatile Disc” :-)
aioobe
Z pewnością miałeś na myśli „Discus”, prawda? :)
Ville Oikarinen

Odpowiedzi:

237

Ponieważ wygląda na to, że odpowiedź jest taka, że ​​nie ma jednego standardu dla tego w Javie, chciałbym zauważyć, że Wytyczne Projektowe .NET Framework to określają.

Teraz, zanim zwalił mnie na bycie poza tematem, pamiętaj, że wytyczne dotyczące nazewnictwa klas dla Java i .NET Framework są dość podobne, co sprawia, że ​​wytyczne .NET są przydatne jako przekonujące odniesienie.

Główne zasady

Obie wytyczne zalecają stosowanie akronimów tylko wtedy, gdy akronim jest powszechnie znany i dobrze rozumiany. DVD lub XML to doskonałe przykłady, ponieważ chociaż rozpoznasz je natychmiast, rozpoznanie rozszerzonej wersji zajęłoby trochę więcej czasu.

Skróty

Wytyczne .NET Framework zalecają, aby nie używać skrótów (w przeciwieństwie do akronimów), z tym wyjątkiem, że w identyfikatorach można stosować dwa popularne skróty „ID” i „OK”. Podczas korzystania ze skrótu Idzawsze używana jest wielkość liter, z wyjątkiem pierwszego słowa identyfikatora camelCase (w przeciwieństwie do identyfikatora PascalCase).

W Javie ta konwencja jest przestrzegana tylko przez pewien czas. Zobacz, jak mieszane są pisownia getIDi getIdsą w JCL. (Przewiń częściowo w dół tej strony). W wersji Java 8 chociaż, getIdstosowany jest coraz więcej, co wskazówki konwencja PascalCase jest korzystne w dzisiejszych czasach. Najlepiej, jeśli to możliwe, po prostu całkowicie unikać skrótów.

Krótkie akronimy

Wytyczne .NET Framework mówią, że dwa akronimy literowe, takie jak „IO”, powinny mieć taki sam przypadek dla obu liter. Tak więc dla identyfikatorów PascalCase (takich jak nazwa klasy) można uzyskać DBRate, podczas gdy dla identyfikatora camelCase (np. Zmiennej lokalnej) możesz miećioChannel .

Zdecydowanie wydaje się to być dominującą konwencją również w Javie.

Długie akronimy

Wytyczne .NET Framework zalecają, aby w akronimach trzyliterowych lub dłuższych używać identyfikatorów mieszanych dla identyfikatorów PascalCase i camelCase, z wyjątkiem pierwszego słowa identyfikatora camelCase. Zatem dla nazwy klasy możesz mieć XmlDocument, podczas gdy zmienna lokalna może być nazwana httpRequest.

Ta konwencja nie zawsze jest przestrzegana w Javie. Wydaje się, że cztery akronimy znaków zwykle używają mieszanych liter, ale nawet JCL nie jest spójny w przypadku akronimów trzyliterowych. Większość z nich wygląda na wielkie litery, na przykład „URL”, „XML”, „SQL” i „DOM”, ale są pewne wyjątki, takie jak „Jar”.

Wniosek

W przypadku Java:

W przypadku akronimów o wielkości 4+ liter używaj mieszanych liter. Standardowa biblioteka to robi i ma to po prostu sens.

W przypadku 3-literowych akronimów możesz używać wszystkich wielkich liter, takich jak JCL, lub możesz używać mieszanych liter, jak robi to .NET Framework. Tak czy inaczej, bądź konsekwentny.

W przypadku 2-literowych akronimów należy używać wielkich liter.

W przypadku dwuliterowych skrótów Java nie ma tak naprawdę standardu, ale sugeruję stosowanie małych i wielkich liter, chyba że spójność z innymi nazwami poprawiłaby wygląd wszystkich wielkich liter.

Kevin Cathcart
źródło
11
dobrze postawiony, niezły wysiłek!
Eliran Malka
1
Podoba mi się to, z tym wyjątkiem, że stosowanie CAPS dla akronimów 3- i 2-literowych nie jest spójne. (Może jestem zbyt purystą, ale widzę przyjętą odpowiedź ze względów praktycznych. Plus, istnieje czynnik zamieszania.)
Jon Coombs
1
@JCoombs: Cóż, niespójność dwóch liter dotyczy czegoś, IpAddressco dla wielu ludzi wygląda okropnie. Osobiście, gdy muszę napisać kod Java, wybieram mieszaną wielkość liter dla 3-literowych akronimów, pozostawiając tylko dwie litery jako wyjątkowy przypadek.
Kevin Cathcart,
5
Co się stanie, jeśli nazwa twojej klasy ma wiele sąsiadujących dwuliterowych akronimów? Niezależnie od tego, co zrobisz, będzie wyglądać „źle” - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin
3
Naprawdę dobra odpowiedź. Ale osobiście nie podoba mi się pomysł nazewnictwa .NET, który nazywa się inaczej w zależności od długości akronimów i od tego, czy jest to skrót. Kogo to obchodzi i sprawdza długość akronimu? A może to skrót? Wolę ogólną regułę nazewnictwa. Problem pojawia się, gdy używasz bibliotek stron trzecich o różnych konwencjach, niezależnie od reguły, którą wybierzesz.
Amani Kilumanga,
98

Nie ma „poprawnej” odpowiedzi. Tylko zestaw praktyk i konwencji, które pozwalają lepiej bawić się innymi narzędziami.

Dlatego wolę DvdPlayer. Jest to bardziej pomocne, ponieważ w Eclipse możesz wykonywać Ctrl+ Shift+ Ti wybierać klasy według pierwszej litery każdego słowa.

alternatywny tekst

Lecieć jak po sznurku
źródło
19
oooo to przydatna wskazówka dotycząca zaćmienia. Dzięki!
Peter Perháč
1
(+1) dobra wskazówka. która odpowiada na pytanie :-)
Asaf
2
Wystarczy „SIO”, aby znaleźć tę klasę.
finnw
7
Działa to również w innym miejscu w Eclipse - na przykład automatyczne uzupełnianie. Czy metoda / zmienna o nazwie „myDvdCoverImage”? - wystarczy wpisać mDCI Ctrl + Spacja
teabot
3
istnieją również ustawione wcześniej skróty, takie jak sysout Ctrl + Spacja, daje System.out.println. to samo dotyczy (spróbuj) i (dla)
medopal
50

Widziałem oba używane na wolności, a Sun wydaje się pasować do tego DVDPlayerstylu. Wolę DvdPlayerjednak, ponieważ w ten sposób jest jasne, gdzie są granice słów, nawet jeśli istnieje wiele kolejnych akronimów, jak w HTTPURLConnection.

JaakkoK
źródło
3
Szybsze jest także pisanie w ten sposób.
Ates Goral
6
Myślę, że „DVDPlayer” sprawia, że ​​granice słów są wyraźniejsze. „Dvd” nie jest słowem, podczas gdy „DVD” to akronim od słów „Digital Versatile Disc”. Tak więc rzeczywiste granice słów w „odtwarzaczu DVD” znajdują się w „D”, „V”, „D” i „P”.
Greg Brown,
19
@GregBrown: DVD to dysk z dziurą, nikt poza tobą nie zna jego pełnej nazwy, nie obchodzi go to. I o wiele bardziej praktyczne jest użycie DvdPlayer.
Igor Rodriguez
4
@GregBrown: W rzeczywistości jest to bardziej praktyczne przynajmniej w Eclipse, gdzie rozpoznawanie wielbłądów jest uciążliwe z akronimami: tj. W DvdPlayer możesz wpisać „DP” i nacisnąć Ctrl + 1, aby wybrać opcję wyboru DvdPlayer, ale jeśli miałeś DVDPlayer, musisz wpisać „DVDP”. I jest jeszcze bardziej denerwujący, jeśli jest dłuższy. Nie chciałbym mieć UNESCOConnector w moim kodzie. W każdym razie jest to kwestia wyboru.
Igor Rodriguez
22
Innym dobrym przykładem jest HTTPSID - czy miałem na myśli SID HTTP lub HTTPS ID ... Dlatego powinien być napisany odpowiednio HttpSid lub HttpsId, aby lepiej wyjaśnić znaczenie.
Oz Edri,
37

Lubię definiować poszczególne wystąpienia klas w następujący sposób:

Catalogue catalogue;
Person person;

Dlatego gdybym używał DVDPlayer, jak nazwałbym to wystąpienie? dVDPlayer? Dlatego wybrałbym DvdPlayernazwę klasy, abyś mógł nazwać instancje jak dvdPlayer.

Peter Perháč
źródło
16
Co jest nie tak z DVDPlayer dvdPlayer;?
azz
9
@DerFlatulator Co z tym nie tak? Bez względu na to, jak przybyłeś dvdPlayer, kiedy wrócisz, dostaniesz DvdPlayer.
maaartinus,
5
@DerFlatulator: jest to kwestia automatyzacji podczas konwersji z UpperCamelCase na lowerCamelCase: Miałem problem podczas automatyzacji Hibernacji mapowania do przypadku snake_case: DvdPlayer -> dvd_playerale DVDPlayer -> d_v_d_player. Nie ma możliwości zautomatyzowania DVDPlayer do dvd_player.
pdem
3
@DerFlatulator: ok, dziękuję za odpowiedź, zadziałało w tym przypadku. Ale nadal jestem przekonany, że notacja „DvdPlayer”: co z DVDRPGPlayer ?, powinna zostać przekonwertowana na dvdRpgPlayer, a nie dvdrpgPlayer.
pdem
2
Weź również pod uwagę swoje programy pobierające i ustawiające: getDvdPlayer()działa lepiej niż getDVDPlayer(), na przykład, gdy jest używany z JSP EL (np foo.dvdPlayer.). A jeśli nazywasz gettery małymi literami w akronimach, najlepiej jest zachować te same nazwy klas, aby zachować spójność i przewidywalność.
daiscog
33

Kilka przykładów z klas JavaSE, apache commons i spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Więc - to nie ma znaczenia.

Bozho
źródło
3
Zgoda. Po prostu bądź spójny w bazie kodu.
JARC
2
Nie powiedziałbym, że to nie ma znaczenia, chociaż nie jest to nic wielkiego. Niektórzy użytkownicy uważają, że ogólnie preferowane standardy są bardzo pomocne, nawet jeśli nie wszyscy konsekwentnie je przestrzegają.
Jon Coombs
Wolałbym SRSsię SoftwareRequirementSpecification?
Shantaram Tupe
24

Wydaje się, że skuteczna Java woli DvdPlayer.

Brian Harris
źródło
10

Jak wskazali inni, jest to styl, który różni się w zależności od projektu. Projekty Google, takie jak Guava i GWT, preferują DvdPlayerstyl.

https://google.github.io/styleguide/javaguide.html#s5.3-camel-case

Steven Benitez
źródło
Bardziej ogólny link do konwencji Google dla DvdPlayerstylu: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel
1
Link w odpowiedzi został przeniesiony na gwtproject.org/makinggwtbetter.html#codestyle Link, o którym wspominał @StanKurdziel, przeniósł się na google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers
8

Z dokumentacji Sun Java :

Nazwy klas powinny być rzeczownikami, pisane wielkimi literami, z pierwszą literą każdego wewnętrznego słowa pisanego wielkimi literami. Staraj się, aby nazwy klas były proste i opisowe. Używaj całych słów, unikaj akronimów i skrótów (chyba że skrót jest znacznie szerszy niż długa forma, taka jak URL lub HTML).

kodaddict
źródło
14
To tak naprawdę nie mówi nic o tym, czy powinna to być górna czy wielbłądowa obudowa.
DD.
@DD. Myślę, że „znacznie częściej używane” punkty
oznaczają użycie wielkich liter
3

DVDPlayerjest standardem, ale DvdPlayernie jest rzadkością.

Częściej niż nie widzisz getId. Prawdopodobnie wynika to z myślenia, że ​​ID to skrót od „Tożsamości”. To właściwie inicjały dokumentu tożsamości.

HttpURLConnectionjest często podawany jako przykład konwencji mieszanej. Jednak „http” używany jako nazwa protokołu w adresie URL powinien być pisany małymi literami (chociaż często są akceptowane duże litery).

Tom Hawtin - tackline
źródło
2
Nie sądzę, że to naprawdę standard, ale prawdopodobnie jest najczęstszy.
ur.
Jest w standardzie Sun Java Coding Standard, IIRC. Chociaż nie ma go w JLS.
Tom Hawtin - tackline
7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire
2
Jestem prawie pewien, że większość ludzi używa ID jako skrótu Identyfikatora ... tzn. W bazie danych identyfikator tabeli odnosi się do identyfikatora tabeli do dokumentu tożsamości.
DD.
9
DVDPlayer zdecydowanie nie jest standardem; nawet JDK jest bardzo niespójne w swoim podejściu do tego.
Kevin Bourrillion
0

Nie ma „poprawnych”, tutaj są tylko preferencje.

Sun jest spójny w sposobie, w jaki nazywają klasy zawierające „URL” i „HTML”, ale widzę HTTP używający zarówno wszystkich wielkich liter, jak i wielbłąda w javadocs.

Osobiście wolałbym DvdPlayer.

duffymo
źródło
Uważam, że nazwa protokołu HTTP w adresach URL powinna być pisana małymi literami (chociaż może być akceptowana wielkimi literami przez przeglądarki).
Tom Hawtin - tackline