Convenção de nomenclatura Java com acrônimos [fechado]

218

Qual é o nome correto para a seguinte classe Java: DVDPlayerou DvdPlayer?

DD.
fonte
93
Eu odeio siglas. DigitalVersatileDiscPlayeré o caminho a seguir.
Tom Hawtin - tackline
7
+1 a Tom para a piada. Acho essa pergunta útil se "correto" for reinterpretado como "padrão" ou "mais típico". A resposta aceita é ótima!
Jon Coombs
6
Para mim, faz sentido pensar nessas siglas como uma única palavra e, como tal, sigo a convenção e uso DvdPlayer.
Daniel
7
O guia de estilo tem o seguinte a dizer: "Formate uma abreviação como uma palavra se ela fizer parte de um nome de classe mais longo". , assim DvdPlayeré o caminho a percorrer. (E, para Tom, "use palavras inteiras e evite usar abreviações, a menos que a abreviação seja mais amplamente usada que a forma longa".) E acho que "DVD" é mais amplamente usado que "Digital Versatile Disc" :-)
aioobe
Você certamente quis dizer "Discus", não foi? :)
Ville Oikarinen

Respostas:

237

Como parece que a resposta é que não existe um padrão único para isso em Java, gostaria de observar que as Diretrizes de Design do .NET Framework especificam isso.

Agora, antes de me criticar por estar fora do tópico, lembre-se de que as diretrizes de nomenclatura de classe para Java e .NET Framework são bastante semelhantes, o que torna as diretrizes .NET úteis como referência persuasiva.

Regras gerais

Ambas as diretrizes recomendam o uso de siglas apenas quando o acrônimo é amplamente conhecido e bem compreendido. DVD ou XML são excelentes exemplos disso, pois enquanto você os reconhecerá imediatamente, levará um pouco mais para reconhecer a versão expandida.

Abreviações

As Diretrizes do .NET Framework recomendam não usar abreviações (em oposição a siglas), exceto que duas abreviações comuns 'ID' e 'OK' podem ser usadas nos identificadores. Ao usar uma abreviação, o caso misto Idé sempre usado, exceto a primeira palavra de um identificador camelCase (em oposição a um identificador PascalCase).

Em Java, essa convenção é seguida apenas algumas vezes. Veja como as grafias getIDe a mistura getIdestão misturadas na JCL. (Role parcialmente nessa página). Na versão Java 8 , porém, getIdé usado cada vez mais, o que sugere que a convenção PascalCase é preferida atualmente. É melhor evitar as abreviações inteiramente quando possível.

Acrônimos curtos

As Diretrizes do .NET Framework dizem que acrônimos de duas letras como 'IO' devem ter o mesmo caso para ambas as letras. Então, para os identificadores PascalCase (como o nome de uma classe) você obteria DBRate, enquanto para o identificador camelCase (como uma variável local), você pode ter ioChannel.

Definitivamente, essa também parece ser a convenção predominante em Java.

Acrônimos longos

As diretrizes do .NET Framework recomendam que acrônimos de três letras ou mais usem maiúsculas e minúsculas para os identificadores PascalCase e camelCase, exceto a primeira palavra de um identificador camelCase. Assim, para um nome de classe que você possa ter XmlDocument, enquanto uma variável local pode ser nomeada httpRequest.

Esta convenção nem sempre é seguida em Java. Os acrônimos de quatro caracteres costumam usar letras maiúsculas e minúsculas, mas mesmo o JCL não é consistente com acrônimos de três letras. A maioria deles parece estar em maiúscula, como 'URL', 'XML', 'SQL' e 'DOM', mas existem algumas exceções como 'Jar'.

Conclusão

Para Java:

Para acrônimos com mais de 4 letras, use letras maiúsculas e minúsculas. A biblioteca padrão faz isso, e isso faz muito sentido.

Para acrônimos de três letras, você pode usar todas as letras maiúsculas, como a JCL, ou usar maiúsculas e minúsculas, como o .NET Framework. De qualquer maneira, seja consistente.

Para acrônimos de 2 letras, use todas as maiúsculas.

Para abreviações de duas letras, Java realmente não tem um padrão, mas sugiro o uso de maiúsculas e minúsculas, a menos que a consistência com outros nomes faça com que todas as maiúsculas pareçam melhores.

Kevin Cathcart
fonte
11
bem colocado, bom esforço!
Eliran Malka
1
Eu gosto disso, exceto que não é consistente ter CAPS para acrônimos de 3 e 2 letras. (Talvez eu sou muito de um purista, mas ver a resposta aceita por razões práticas Além disso, há o fator de confusão..)
Jon Coombs
1
@ JCoombs: Bem, a inconsistência de duas letras é algo IpAddressque parece terrível para muitas pessoas. Pessoalmente, quando preciso escrever código Java, uso letras maiúsculas e minúsculas para os acrônimos de três letras, deixando apenas as duas letras como um caso especial.
Kevin Cathcart
5
E se o nome da sua classe tiver vários acrônimos adjacentes de duas letras? Independentemente do que você faz, ele vai olhar 'errado' - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin
3
Resposta realmente boa. Mas, pessoalmente, não gosto da idéia das diretrizes do .NET de nomear de maneira diferente, dependendo do tamanho dos acrônimos e se é ou não uma abreviação. Quem realmente se importa e verifica o tamanho de uma sigla? Ou se é uma abreviação? Eu prefiro uma regra geral para nomear. O problema ocorre ao usar bibliotecas de terceiros com convenções diferentes de qualquer regra que você escolher.
Amani Kilumanga
98

Não há resposta "correta". Apenas um conjunto de práticas e convenções que melhor funcionam com suas outras ferramentas.

Por isso eu prefiro DvdPlayer. É mais útil, pois no Eclipse você pode fazer Ctrl+ Shift+ Te selecionar classes pela primeira letra de cada palavra.

texto alternativo

flybywire
fonte
19
oooo que é uma dica útil eclipse. Obrigado!
Peter Perháč
1
(+1) uma boa dica. que responde a pergunta para mim :-)
Asaf
2
Apenas "SIO" é suficiente para encontrar essa classe.
finnw
7
Isso também funciona em outros lugares do Eclipse - preenchimento automático, por exemplo. Tem um método / variável chamado 'myDvdCoverImage'? - digite mDCI Ctrl + Space
teabot
3
também existem alguns atalhos já definidos, como sysout Ctrl + Space, fornece System.out.println. o mesmo vale para (tentar) e (para) #
1050 medopal
50

Eu já vi os dois usados ​​na natureza, e Sun parece seguir o DVDPlayerestilo. Eu prefiro DvdPlayer, porém, porque dessa forma fica claro onde os limites das palavras estão, mesmo que existam várias siglas consecutivas, como em HTTPURLConnection.

JaakkoK
fonte
3
Também é mais rápido digitar dessa maneira.
Ates Goral
6
Eu acho que "DVDPlayer" torna os limites da palavra mais claros. "Dvd" não é uma palavra, enquanto "DVD" é um acrônimo para as palavras "Digital Versatile Disc". Portanto, os limites reais das palavras em "DVD Player" estão em "D", "V", "D" e "P".
Greg Brown
18
@ GregBrown: Um DVD é um disco com um furo, ninguém, exceto você sabe o nome completo, nem se importa. E é muito mais prático usar o DvdPlayer.
Igor Rodriguez
4
@GregBrown: Na verdade, é mais prático, pelo menos no Eclipse, onde o reconhecimento de casos de camelo é um problema com acrônimos: ou seja, com o DvdPlayer você pode digitar "DP" e pressionar Ctrl + 1 para escolher DvdPlayer, mas se você tinha o DVDPlayer, teria que digitar "DVDP". E é ainda mais irritante se for mais longo. Eu não gostaria de ter um UNESCOConnector no meu código. Enfim, é uma questão de escolha.
Igor Rodriguez
21
Outro bom exemplo é HTTPSID - quis dizer HTTP SID ou HTTPS ID ... Portanto, deve ser escrito HttpSid ou HttpsId, respectivamente, para melhor explicar o significado.
Oz Edri
37

Eu gosto de definir instâncias individuais de classes da seguinte maneira:

Catalogue catalogue;
Person person;

Portanto, se eu usasse DVDPlayer, como chamaria uma instância disso? dVDPlayer? Portanto, eu escolheria o DvdPlayernome da classe, para que você possa nomear as instâncias como dvdPlayer.

Peter Perháč
fonte
16
O que há de errado DVDPlayer dvdPlayer;?
azz
9
@ DerFlatulator O que há de errado com isso? Não importa como você veio dvdPlayer, quando voltar, você receberá DvdPlayer.
Maaartinus 23/04
5
@ DerFlatulator: é uma questão de automação ao converter de UpperCamelCase para lowerCamelCase: tive o problema ao automatizar o mapeamento do Hibernate para um snake_case: DvdPlayer -> dvd_playermas DVDPlayer -> d_v_d_player. Não há como automatizar o DVDPlayer para o dvd_player.
Pdem
3
@ DerFlatulator: ok, obrigado pela resposta, funcionou neste caso. Mas ainda estou convencido da notação "DvdPlayer": e o DVDRPGPlayer ?, ele deve ser convertido em dvdRpgPlayer, não em dvdrpgPlayer.
Pdem
2
Considere também seus getters e setters: getDvdPlayer()funciona melhor do que getDVDPlayer(), por exemplo, quando usado com JSP EL (por exemplo, foo.dvdPlayer). E se você estiver nomeando seus getters com minúsculas nos acrônimos, é melhor manter os nomes de suas classes iguais para consistência e previsibilidade.
Daiscog
33

Alguns exemplos das classes JavaSE, apache commons e spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Então - isso realmente não importa.

Bozho
fonte
3
Acordado. Apenas seja consistente em sua base de código.
JARC
2
Eu não diria que isso não importa, embora este não seja exatamente um grande problema. Alguns usuários acham os padrões geralmente preferidos muito úteis, mesmo que nem todo mundo seja consistente em segui-los.
Jon Coombs
deve prefiro SRSmais SoftwareRequirementSpecification?
Shantaram Tupe
24

Java eficaz parece preferir o DvdPlayer.

Brian Harris
fonte
10

Como outros indicaram, é uma coisa de estilo que difere entre os projetos. Projetos do Google, como Guava e GWT, preferem o DvdPlayerestilo.

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

Steven Benitez
fonte
Uma ligação mais geral Google convenção para DvdPlayerstyle: google-styleguide.googlecode.com/svn/trunk/...
Stan Kurdziel
1
O link na resposta mudou-se para gwtproject.org/makinggwtbetter.html#codestyle o link @StanKurdziel menciona mudou-se para google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers
8

Dos documentos sun java :

Os nomes das classes devem ser substantivos, em maiúsculas e minúsculas com a primeira letra de cada palavra interna em maiúscula. Tente manter os nomes das classes simples e descritivos. Use palavras inteiras - evite siglas e abreviações (a menos que a abreviação seja muito mais usada do que a forma longa, como URL ou HTML).

codaddict
fonte
14
Isso realmente não diz nada sobre se deve ser maiúscula ou camel.
DD.
@DD. Eu acho que para mim, "muito mais usado" pontos de usar letras maiúsculas para siglas relevantes (HTTP, GET, etc) do que por alguma palavra aleatória específicas de negócios, como DVD, MRI, MAGA, etc.
goelakash
3

DVDPlayeré o padrão, mas DvdPlayernão é incomum.

Você mais frequentemente do que não vê getId. Provavelmente isso se deve ao fato de o ID ser uma abreviação de "Identity". Na verdade, são as iniciais do documento de identidade.

HttpURLConnectioné frequentemente dado como um exemplo de convenção mista. No entanto, "http" usado como nome de protocolo em uma URL deve estar em letras minúsculas (embora letras maiúsculas sejam geralmente aceitas).

Tom Hawtin - linha de orientação
fonte
2
Eu não acho que isso seja realmente um padrão, mas é provavelmente o mais comum.
b.roth
Está no Sun Java Coding Standard, IIRC. Embora não esteja no JLS.
Tom Hawtin - defina
7
HyperTextTransferProtocolUniformResourceLocatorConnection #
flybywire
2
Eu tenho certeza que a maioria das pessoas usa o ID como uma abreviação de Identifier ... ou seja, em um banco de dados, o ID da tabela está se referindo ao identificador da tabela no documento de identidade.
DD.
9
Definitivamente, o DVDPlayer não é o padrão; até o JDK é extremamente inconsistente na abordagem deles.
22710 Kevin Kevin Bourrillion
0

Não há "correto", apenas preferências aqui.

A Sun é consistente na maneira como nomeiam classes que contêm "URL" e "HTML", mas vejo o HTTP usando maiúsculas e minúsculas nos javadocs.

Pessoalmente, eu prefiro o DvdPlayer.

duffymo
fonte
Acredito que o nome do protocolo HTTP nos URLs deve ser escrito em letras minúsculas (embora possa ser aceito em letras maiúsculas pelos navegadores).
Tom Hawtin - tackline