Как следует разделять слова в именах пакетов? Что из перечисленного верно?
-
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 указывает точно такое же (то есть 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 будет в порядке), и они предложите заменить hyphonation на символ подчеркивания ( "mary-lou" → "mary_lou" ) и префикс java-ключевых слов с подчеркиванием ( "com.example.enum" → "com.example._enum" )
Несколько примеров для строчных букв в именах пакетов можно найти в главе 6.8.1 Имена пакетов.
Любой может использовать подчеркивание _ (все в порядке)
Никто не должен использовать гипен - (это плохая практика)
Никто не должен использовать заглавные буквы в именах пакетов (плохая практика)
ПРИМЕЧАНИЕ. Здесь "Плохая практика" предназначена для того, чтобы технически вам разрешалось это использовать, но условно писать ее нехорошо.
Источник: Наименование пакета (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/