Como se deve separar as palavras nos nomes dos pacotes? Quais das seguintes opções estão corretas?
com.stackoverflow.my_package
(sublinhado)com.stackoverflow.my-package
(hífens)com.stackoverflow.MyPackage
(CamelCase)
Qual é o padrão geral?
Como se deve separar as palavras nos nomes dos pacotes? Quais das seguintes opções estão corretas?
com.stackoverflow.my_package
(sublinhado)com.stackoverflow.my-package
(hífens)com.stackoverflow.MyPackage
(CamelCase)Qual é o padrão geral?
Respostas:
Aqui está o que o documento oficial das convenções de nomenclatura prescreve:
Pacotes
O prefixo do nome de um pacote único é sempre escrito em todos os-minúsculas letras ASCII e deve ser um dos nomes de domínio de nível superior, atualmente
com
,edu
,gov
,mil
,net
,org
, ou um dos Inglês códigos de duas letras que identificam países como especificado na ISO Padrão 3166, 1981.Os componentes subsequentes do nome do pacote variam de acordo com as convenções de nomenclatura internas da própria organização. Tais convenções podem especificar que determinados componentes de nome de diretório sejam nomes de divisão, departamento, projeto, máquina ou login.
Exemplos
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
Observe que, em particular, qualquer coisa após o prefixo de domínio de nível superior não é especificado no documento acima. O JLS também concorda com isso, fornecendo os seguintes exemplos:
com.sun.sunsoft.DOE
gov.whitehouse.socks.mousefinder
com.JavaSoft.jag.Oak
org.npr.pledge.driver
uk.ac.city.rugby.game
O seguinte trecho também é relevante:
Em alguns casos, o nome de domínio da Internet pode não ser um nome de pacote válido. Aqui estão algumas convenções sugeridas para lidar com essas situações:
- Se o nome do domínio contiver um hífen ou qualquer outro caractere especial não permitido em um identificador, converta-o em um sublinhado.
- Se algum dos componentes do nome do pacote resultante forem palavras-chave, acrescente-lhes sublinhado.
- Se algum dos componentes resultantes do nome do pacote começar com um dígito ou qualquer outro caractere que não seja permitido como caractere inicial de um identificador, tenha um sublinhado prefixado no componente.
Todos os três não são as convenções.
Use com.stackoverflow.mypackage
.
Os nomes dos pacotes não seguem a convenção de nomenclatura dos camelos, sublinhados ou hífens .
Além disso, o Google Java Style Guide especifica exatamente a mesma com.stackoverflow.mypackage
convenção (ou seja ):
5.2.1 Nomes dos pacotes
Os nomes dos pacotes são minúsculos, com palavras consecutivas simplesmente concatenadas juntas (sem sublinhados). Por exemplo,
com.example.deepspace
, nãocom.example.deepSpace
oucom.example.deep_space
.- Google Java Style Guide: 5.2 Regras por tipo de identificador: 5.2.1 Nomes de pacotes .
Qualquer pessoa pode usar sublinhado _ (está tudo bem)
Ninguém deve usar hypen - (sua má prática)
Ninguém deve usar letras maiúsculas nos nomes dos pacotes (má prática)
OBSERVAÇÃO: Aqui "Bad Practice" é para tecnicamente você poder usá-lo, mas, convencionalmente, não é bom escrever.
Origem: Nomeando um Pacote (docs.oracle)
As convenções oficiais de nomenclatura não são tão rígidas, elas nem 'proíbem' a notação de caso de camelo, exceto o prefixo ( com
no seu exemplo).
Mas eu pessoalmente evitaria letras maiúsculas e hifenizações , números pares. Eu escolheria com.stackoverflow.mypackage
como Bragboy sugeriu também.
(hifenizações '-' não são legais nos nomes dos pacotes)
EDITAR
Interessante - a especificação da linguagem também tem algo a dizer sobre convenções de nomenclatura.
No Capítulo 7.7 Nomes de pacotes exclusivos , vemos exemplos com nomes de pacotes que consistem em letras maiúsculas (para que a notação CamelCase seja aceitável) e sugerem substituir a hifonação por um sublinhado ("mary-lou" -> "mary_lou") e prefixo java palavras-chave com sublinhado ("com.example.enum" -> "com.example._enum")
Mais alguns exemplos de letras maiúsculas nos nomes dos pacotes podem ser encontrados no capítulo 6.8.1 Nomes dos pacotes .
Os sublinhados parecem feios nos nomes dos pacotes. Pelo que vale, no caso de nomes compostos por três ou mais palavras, eu uso iniciais (por exemplo com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo
:) e, em seguida, documento a finalidade do pacote em package-info.java
.
A concatenação de palavras no nome do pacote é algo que a maioria dos desenvolvedores não faz.
Você pode usar algo como.
com.stackoverflow.mypackage
Consulte Declaração de Nome JLS
com.stackoverflow.my.package