Как следует разделять слова в именах пакетов? Какие из следующих являются правильными?
com.stackoverflow.my_package
(подчеркивать)com.stackoverflow.my-package
(Дефис)com.stackoverflow.MyPackage
(CamelCase)
Каков общий стандарт?
Как следует разделять слова в именах пакетов? Какие из следующих являются правильными?
com.stackoverflow.my_package
(подчеркивать)com.stackoverflow.my-package
(Дефис)com.stackoverflow.MyPackage
(CamelCase)Каков общий стандарт?
Ответы:
Вот что предписывает официальный документ по соглашениям об именах:
пакеты
Приставка уникального имени пакета всегда пишется во всех прописных буквах ASCII букв и должна быть одним из имен доменов верхнего уровня, в настоящее время
com
,edu
,gov
,mil
,net
,org
, или один из английских двух буквенных кодов , идентифицирующих страны как определено в ISO Стандарт 3166, 1981.Последующие компоненты имени пакета различаются в соответствии с собственными внутренними соглашениями об именах организации. Такие соглашения могут указывать, что определенными компонентами имен каталогов являются имена подразделений, отделов, проектов, компьютеров или имен входа.
Примеры
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
Обратите внимание, что, в частности, все, что следует за префиксом домена верхнего уровня, не указано в приведенном выше документе. JLS также соглашается с этим, приводя следующие примеры:
com.sun.sunsoft.DOE
gov.whitehouse.socks.mousefinder
com.JavaSoft.jag.Oak
org.npr.pledge.driver
uk.ac.city.rugby.game
Следующая выдержка также актуальна:
В некоторых случаях имя интернет-домена может не являться допустимым именем пакета. Вот некоторые предлагаемые соглашения для решения этих ситуаций:
- Если имя домена содержит дефис или любой другой специальный символ, не разрешенный в идентификаторе, преобразуйте его в подчеркивание.
- Если какой-либо из компонентов имени пакета в результате является ключевым словом, добавьте к ним подчеркивание.
- Если любой из результирующих компонентов имени пакета начинается с цифры или любого другого символа, который не допускается в качестве начального символа идентификатора, перед компонентом ставится префикс подчеркивания.
Все три не являются соглашениями.
Использование com.stackoverflow.mypackage
.
Имена пакетов не следуют верблюда корпуса или подчеркивания или дефисы пакетов соглашение об именах .
Кроме того, в Google Java Style Guide указано точно такое же (т.е. com.stackoverflow.mypackage
) соглашение:
5.2.1 Имена пакетов
Все имена пакетов в нижнем регистре с последовательными словами, просто соединенными вместе (без подчеркивания). Например
com.example.deepspace
, нетcom.example.deepSpace
илиcom.example.deep_space
.- Google Java Style Guide: 5.2 Правила по типу идентификатора: 5.2.1 Имена пакетов .
Любой может использовать подчеркивание _ (все в порядке)
Никто не должен использовать hypen - (это плохая практика)
Никто не должен использовать заглавные буквы внутри имен пакетов (плохая практика)
ПРИМЕЧАНИЕ. Здесь «Плохая практика» предназначена для того, чтобы технически вам разрешалось это использовать, но условно писать ее нехорошо.
Источник: Наименование пакета (docs.oracle)
Официальные соглашения об именах не так уж строги, они даже не запрещают нотацию верблюда, за исключением префикса ( com
в вашем примере).
Но я бы лично избегал прописных букв и переносов , даже цифр. Я бы выбрал, com.stackoverflow.mypackage
как предложил Брэгбой.
(переносы '-' недопустимы в именах пакетов)
РЕДАКТИРОВАТЬ
Интересно - спецификация языка тоже может сказать о соглашениях по именованию.
В главе 7.7 «Уникальные имена пакетов» мы видим примеры с именами пакетов, которые состоят из заглавных букв (так что нотация CamelCase будет в порядке), и они предлагают заменить перенос через подчеркивание («mary-lou» -> «mary_lou») и префикс java ключевые слова с подчеркиванием ("com.example.enum" -> "com.example._enum")
Еще несколько примеров заглавных букв в именах пакетов можно найти в главе 6.8.1 «Имена пакетов» .
Подчеркивания выглядят некрасиво в названиях пакетов. Для чего стоит, в случае составления имен из трех или более слов я использую инициалы (например:), com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo
а затем документирую назначение пакета в package-info.java
.
Объединение слов в имени пакета - это то, что большинство разработчиков не делают.
Вы можете использовать что-то вроде.
com.stackoverflow.mypackage
com.stackoverflow.my.package