Конвенція про іменування Java з абревіатурами [закрито]


218

Яка правильна назва для наступного класу Java: DVDPlayerабо DvdPlayer?


93
Я ненавиджу абревіатури. DigitalVersatileDiscPlayerце шлях вперед.
Том Хоутін - тайклін

7
+1 до Тома за жарт. Я вважаю це питання корисним, якщо "правильний" переосмислюється як "стандартний" або "найбільш типовий". Прийнята відповідь чудова!
Джон Кумбс

6
Для мене є сенс думати про такі абревіатури як про одне слово і як такий я дотримуюсь конвенції та використання DvdPlayer.
Даніель

7
У посібнику зі стилів слід сказати про нього: "Форматуйте абревіатуру як слово, якщо воно є частиною більш довгої назви класу." , так DvdPlayerце шлях. (І, для Тома, "Використовуйте цілі слова та уникайте використання скорочень, якщо тільки абревіатура не використовується ширше, ніж довга форма". Я вважаю, що "DVD" використовується більш широко, ніж "Цифровий універсальний диск" :-)
aioobe

Ви, звичайно, мали на увазі "Обговорення", чи не так? :)
Віль Ойкарінен

Відповіді:


237

Оскільки, схоже, відповідь полягає в тому, що в Java не існує єдиного стандарту для цього, я хотів би зазначити, що в.

Тепер перед тим, як засунути мене за те, що я не в темі, пам’ятайте, що вказівки щодо іменування класів для Java та .NET Framework дуже схожі, що робить рекомендації .NET корисними як переконливі посилання.

Загальні правила

Обидва рекомендації рекомендують використовувати абревіатури лише тоді, коли абревіатура широко відома і добре зрозуміла. DVD або XML - прекрасні приклади цього, оскільки, хоча ви їх відразу впізнаєте, знадобиться трохи більше часу, щоб розпізнати розширену версію.

Скорочення

.NET Framework Guidelines рекомендує не використовувати абревіатури (на відміну від абревіатур), за винятком того, що в ідентифікаторах можуть використовуватися дві загальні абревіатури 'ID' та 'OK'. При використанні абревіатури Idзавжди використовується змішаний регістр , за винятком першого слова ідентифікатора camelCase (на відміну від ідентифікатора PascalCase).

У Java ця конвенція дотримується лише деякий час. Погляньте, наскільки змішані написання getIDта getIdє в JCL. (Прокрутіть частину сторінки вниз). У версії Java 8, однак, getIdвикористовується все більше і більше, що натякає на сьогодні конвенцію PascalCase. Найкраще просто уникати скорочень, коли це можливо.

Короткі абревіатури

Рамкові вказівки .NET говорять, що два літери-акроніми, такі як "IO", повинні мати однаковий регістр для обох літер. Отже, для ідентифікаторів PascalCase (наприклад, назва класу) ви отримаєте DBRate, тоді як для ідентифікатора camelCase (як локальної змінної) у вас може бутиioChannel .

Це, безумовно, здається, що переважає конвенція і на Яві.

Довгі абревіатури

Вказівки .NET Framework рекомендують акронімами три літери або більше використовувати змішаний регістр для ідентифікаторів PascalCase та camelCase, за винятком першого слова ідентифікатора camelCase. Таким чином, для імені класу ви можете мати XmlDocument, тоді як локальна змінна може бути названа httpRequest.

Ця конвенція не завжди дотримується на Яві. Чотири символи акронімів, як правило, зазвичай використовують змішаний регістр, але навіть JCL не відповідає трикратним абревіатурам. Більшість з них, здається, є великими літерами, як-от "URL", "XML", "SQL" та "DOM", але є деякі винятки, наприклад "Jar".

Висновок

Для Java:

Для абревіатур із 4 літер використовуйте змішаний регістр. Стандартна бібліотека робить це, і це просто має сенс.

Для абревіатур з трьома літерами ви можете використовувати всі великі регістри, наприклад, JCL, або ви можете використовувати змішаний регістр, як це робить .NET Framework. У будь-якому випадку будьте послідовними.

Для двох літерних абревіатур використовуйте всі великі літери.

Для двох літерних абревіатур Java насправді не має стандарту, але я пропоную використовувати змішаний регістр, якщо тільки узгодженість з іншими іменами не покращить великі регістри.


11
добре кажучи, приємних зусиль!
Еліран Малька

1
Мені це подобається, за винятком того, що не послідовно мати CAPS для 3- та 2-літерних абревіатур. (Можливо, я дуже пурист, але побачити прийняту відповідь з практичних причин. Плюс, є чинник плутанини.)
Джон Кумбс

1
@JCoombs: Ну, невідповідність двох літер - це щось на зразок, IpAddressщо багатьом людям виглядає жахливо. Особисто, коли мені потрібно написати код Java, я переходжу зі змішаним регістром для 3-х буквових абревіатур, залишаючи лише дві літери як особливий випадок.
Кевін Кеткарт

5
Що робити, якщо в назви вашого класу є кілька сусідніх дволітерних абревіатур? Незалежно від того, що ви робите, це буде виглядати "неправильно" - USGFCharset, UsGfCharset, US_GFCharset ...
Кевін

3
Дійсно хороша відповідь. Але особисто мені не подобається ідея керівництва .NET називати по-різному, залежно від довжини абревіатур і того, чи це абревіатура чи ні. Хто насправді переймається і перевіряє довжину абревіатури? Або якщо це абревіатура? Я вважаю за краще правило ковдри для називання. Проблема виникає при використанні сторонніх бібліотек з різними умовами від будь-якого правила, яке ви вибрали.
Амані Кілуманга

98

"Правильної" відповіді немає. Просто набір практик і умов, які краще грають з іншими вашими інструментами.

Тому я віддаю перевагу DvdPlayer. Це корисніше, так як в Eclipse ви можете робити Ctrl+ Shift+ Tі вибирати класи за першою літерою кожного слова.

alt текст


19
oooo, це корисна порада щодо затемнення. Дякую!
Пітер Пергач

1
(+1) хороша порада. що відповідає на питання для мене :-)
Asaf

2
Для того, щоб знайти цей клас, достатньо лише "SIO".
finnw

7
Це також працює в інших місцях Eclipse - наприклад, автозавершення. У вас метод / змінна назва "myDvdCoverImage"? - просто введіть mDCI Ctrl + Space
чайник

3
є також уже встановлені комбінації клавіш, як-от sysout Ctrl + Space, що дає System.out.println. те саме стосується (спробувати) та (за)
медопалу

50

Я бачив, як вони використовуються в дикій природі, і НД, здається, йде на DVDPlayerстиль. Я вважаю за краще DvdPlayer, тому що таким чином зрозуміло, де знаходяться межі слова, навіть якщо є кілька послідовних абревіатур, як у HTTPURLConnection.


3
Це також швидше ввести цей спосіб.
Атес Гораль

6
Я думаю, що "DVDPlayer" робить межі слова більш чіткими. "DVD" - це не слово, тоді як "DVD" - це абревіатура для слів "Digital Versatile Disc". Таким чином, фактичні межі слів у програвачі "DVD-програвач" знаходяться на "D", "V", "D" та "P".
Грег Браун

19
@GregBrown: DVD - це диск з отвором, ніхто, крім вас, не знає його повного найменування, і про це не піклується. І використовувати DvdPlayer набагато практичніше.
Ігор Родрігес

4
@GregBrown: Насправді це практичніше принаймні в Eclipse, де розпізнавання випадку верблюда - це біль із абревіатурами: тобто з DvdPlayer ви можете набрати "DP" і натиснути Ctrl + 1, щоб отримати вибір для вибору DvdPlayer, але якщо у вас був DVDPlayer, вам доведеться набрати "DVDP". І ще більше дратує, якщо вона довша. Я не хотів би мати в своєму коді UNESCOConnector. У будь-якому випадку це питання вибору.
Ігор Родрігес

22
Ще один хороший приклад - HTTPSID - я мав на увазі HTTP SID або HTTPS ID ... Тому слід написати HttpSid або HttpsId відповідно, щоб краще пояснити значення.
Оз Едрі

37

Мені подобається визначати окремі екземпляри занять таким чином:

Catalogue catalogue;
Person person;

Тому, якби я використав DVDPlayer, що я б назвав екземпляром цього? dVDPlayer? Отже, я б обрав DvdPlayerім'я класу, щоб ви могли назвати такі екземпляри dvdPlayer.


16
Що не так DVDPlayer dvdPlayer;?
azz

9
@DerFlatulator Що з цим не так? Як би ти не прийшов dvdPlayer, коли повернешся назад, ти отримаєш DvdPlayer.
maaartinus

5
@DerFlatulator: це питання автоматизації при перетворенні з UpperCamelCase на нижчуCamelCase: у мене виникла проблема під час автоматичного відображення в сплячому режимі до snake_case: DvdPlayer -> dvd_playerале DVDPlayer -> d_v_d_player. Немає можливості автоматизувати DVDPlayer до dvd_player.
pdem

3
@DerFlatulator: гаразд, дякую за відповідь, у цьому випадку він працював. Але я все одно переконаний у позначенні "DvdPlayer": а як щодо DVDRPGPlayer ?, його слід перетворити на dvdRpgPlayer, а не в dvdrpgPlayer.
pdem

2
Також врахуйте свої геттери та сетери: getDvdPlayer()працює краще, ніж getDVDPlayer(), наприклад, при використанні з JSP EL (наприклад, foo.dvdPlayer). І якщо ви називаєте ваші геттери з малої літери в абревіатурах, найкраще зберегти назви класів однаковими для послідовності та передбачуваності.
дайског

33

Деякі приклади з класів JavaSE, apache commons та spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Отже - це насправді не має значення.


3
Домовились. Просто будьте послідовними у своїй кодовій базі.
JARC

2
Я б не сказав, що це не має значення, хоча це не зовсім велика справа. Деякі користувачі вважають загальноприйнятими стандартами дуже корисними, навіть якщо не всі інші послідовно дотримуються їх.
Джон Кумбс

я повинен віддавати перевагу SRSнад SoftwareRequirementSpecification?
Шантарам Тупе


10

Як зазначають інші, його стиль є різним у різних проектах. Проекти Google, такі як Guava та GWT, віддають перевагу DvdPlayerстилю.

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


Більш загальне посилання на конвенцію Google щодо DvdPlayerстилю: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel

1
Посилання у відповіді перейшло на gwtproject.org/makinggwtbetter.html#codestyle Посилання @StanKurdziel згадується на google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers

8

Документи від сонця Java :

Назви класів мають бути іменниками, у змішаному відмінку з першою літерою кожного внутрішнього слова з великої літери. Намагайтеся, щоб назви класу були простими та описовими. Використовуйте цілі слова, уникайте абревіатур та скорочень (якщо тільки абревіатура не використовується набагато ширше, ніж довга форма, наприклад, URL чи HTML).


14
Це насправді нічого не говорить про те, чи має бути це верхній або верблюдний випадок.
ДД.

@DD. Я вважаю, що "набагато ширше" вказує на використання "all-caps" для відповідних абревіатур (HTTP, GET тощо), ніж для деяких випадкових бізнес-слів, таких як DVD, MRI, MAGA тощо.
goelakash

3

DVDPlayer є стандартом, але DvdPlayer це не рідкість.

Ви частіше, ніж не бачите getId . Можливо, це пов'язано з тим, що мислення ID - це скорочення "Ідентичності". Це фактично ініціали документа, що посвідчує особу.

HttpURLConnectionчасто подається як приклад змішаної конвенції. Однак "http", що використовується як ім'я протоколу в URL-адресі, має бути малим регістром (хоча верхній регістр часто приймається).


2
Я не думаю, що це насправді стандарт, але це, мабуть, найпоширеніший.
b.roth

Це в стандарті кодування Sun Java, IIRC. Хоча не в JLS.
Том Хотін - тайклін

7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire

2
Я впевнений, що більшість людей використовують ID як абревіатуру Ідентифікатора ... тобто в базі даних ідентифікатор таблиці посилається на ідентифікатор таблиці на документ, що посвідчує особу.
ДД.

9
DVDPlayer, безумовно, не є стандартом; навіть JDK дико суперечить своєму підходу до цього.
Кевін Бурліон

0

Тут немає «правильних», лише вподобання.

Sun узгоджується з тим, як вони називають класи, що містять "URL" та "HTML", але я бачу HTTP, використовуючи як усі шапки, так і верблюжий випадок у javadocs.

Особисто я вважаю за краще DvdPlayer.


Я вважаю, що ім'я протоколу HTTP в URL-адресах має бути записане в нижньому регістрі (хоча браузери його можуть приймати у верхньому регістрі).
Том Хотін - тайклін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.