Что такое соглашение для разделителя слов в именах пакетов Java?

Как следует разделять слова в именах пакетов? Что из следующего верно?

  1. com.stackoverflow.my_package (подчеркивание)
  2. com.stackoverflow.my-package (дефис)
  3. com.stackoverflow.MyPackage (CamelCase)

Каков общий стандарт?

Вот что предписывает документ официальных соглашений об именах:

пакеты

Префикс имени уникального пакета всегда записывается буквами ASCII со строчными буквами и должен быть одним из доменных имен верхнего уровня, в настоящее время com , edu , gov , mil , net , org или одного из двухбуквенных кодов английского языка определяя страны, указанные в стандарте ИСО 3166, 1981.

Последующие компоненты имени пакета различаются в соответствии с собственными внутренними соглашениями об именах организации. Такие соглашения могут указывать, что некоторые компоненты имени каталога являются делениями, департаментами, проектами, машинами или именами входа.

Примеры

  • com.sun.eng
  • com.apple.quicktime.v2
  • edu.cmu.cs.bovik.cheese

Рекомендации

  • java.sun.com – Условные обозначения / Именование

Обратите внимание, что, в частности, все, что следует за префиксом домена верхнего уровня, не указан указанным выше документом. JLS также соглашается с этим, указав следующие примеры:

  • com.sun.sunsoft.DOE
  • gov.whitehouse.socks.mousefinder
  • com.JavaSoft.jag.Oak
  • org.npr.pledge.driver
  • uk.ac.city.rugby.game

Также актуальна следующая выдержка:

В некоторых случаях имя домена в Интернете не может быть допустимым именем пакета. Вот некоторые предлагаемые соглашения для решения этих ситуаций:

  • Если имя домена содержит дефис или любой другой специальный символ, не разрешенный в идентификаторе, преобразуйте его в символ подчеркивания.
  • Если какой-либо из результирующих компонентов имени пакета является ключевым словом, добавьте в них подчеркивание.
  • Если какой-либо из полученных компонентов имени пакета начинается с цифры или любого другого символа, который не разрешен в качестве начального символа идентификатора, имеет знак подчеркивания, префиксный для компонента.

Рекомендации

  • JLS 6.8.1 Имена пакетов
  • JLS 7.7 Уникальные имена пакетов

Все три не являются условностями.

Используйте com.stackoverflow.mypackage .

Имена пакетов не соответствуют правилам именования верблюдов или символов подчеркивания или дефисов.

Кроме того, в руководстве по стилю Java Java указано точно такое же (например, com.stackoverflow.mypackage ) соглашение:

5.2.1 Названия пакетов

Имена пакетов – это строчные буквы, причем последовательные слова просто объединяются (без подчеркивания). Например, com.example.deepspace , а не com.example.deepSpace или com.example.deep_space .

– Руководство по стилю Google Java: 5.2. Правила по типу идентификатора: 5.2.1 Названия пакетов .

Официальные соглашения об именах не настолько строги, но даже «запрещают» нотацию верблюда, кроме префикса ( com в вашем примере).

Но я лично избегал бы прописных букв и переносов , даже цифр. Я бы выбрал com.stackoverflow.mypackage как предложил Брэгбой.

(переносы «-» не являются законными в именах пакетов)

РЕДАКТИРОВАТЬ

Интересно – в спецификации языка есть что сказать и о соглашениях об именах.

В главе 7.7 «Имена уникальных пакетов» мы видим примеры с именами пакетов, которые состоят из букв верхнего регистра (поэтому нотация CamelCase будет в порядке), и они предлагают заменить гифонизацию на символ подчеркивания («mary-lou» -> «mary_lou») и префикс java ключевые слова с подчеркиванием («com.example.enum» -> «com.example._enum»)

Несколько примеров для строчных букв в именах пакетов можно найти в главе 6.8.1 Имена пакетов .

Любой может использовать символ подчеркивания _ (его ОК)

Никто не должен использовать hypen (его плохая практика)

Никто не должен использовать буквы капиталов внутри имен пакетов (плохая практика)

Источник: Именование пакета (docs.oracle)

Подчеркивания выглядят уродливыми в именах пакетов. Для того, что стоит, в случае имен, com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo из трех или более слов, я использую инициалы (например: com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo ), а затем документирует пакет цели в package-info.java.

Конкатенация слов в имени пакета – это то, что большинство разработчиков не делает.

Вы можете использовать что-то вроде этого.

com.stackoverflow.mypackage

Обратитесь к декларации имени JLS

Я бы предпочел использовать отдельные слова и подпакеты, поэтому вместо того, чтобы говорить com.stackoverflow.my-package, я бы сделал его com.stackoverflow.my.package

Это открывает возможность добавления подпакетов в будущем, связанных с вашим родительским пакетом. Ссылка: http://programmergate.com/coding-conventions/

  • Как создать интеллектуальный пакет Meteor
  • Как использовать пользовательские пакеты в golang?
  • Целевой пакет MSBuild не найден
  • Преимущество использования Parcelable вместо сериализации объекта
  • NodeJS требует глобального модуля / пакета
  • ASP.NET связывает, как отключить минимизацию
  • Как мне обращаться с «пакетом ххх» не доступно (для R версии xyz)? Предупреждение?
  • Ошибка при установке пакета R
  • Как использовать Parcel в Android?
  • Запуск Java в пакете из командной строки
  • Как удалить пакет из Laravel с помощью композитора?
  • Давайте будем гением компьютера.