Convenzione di denominazione Java con acronimi [chiuso]


218

Qual è il nome corretto per la seguente classe Java: DVDPlayero DvdPlayer?


93
Odio gli acronimi. DigitalVersatileDiscPlayerè la via da seguire.
Tom Hawtin: affronta il

7
+1 a Tom per la battuta. Trovo questa domanda utile se "corretto" viene reinterpretato come "standard" o "più tipico". La risposta accettata è fantastica!
Jon Coombs,

6
Per me ha senso pensare a tali acronimi come una sola parola e come tale seguo la convenzione e uso DvdPlayer.
Daniel,

7
La guida di stile ha il seguente da dire al riguardo: "Formatta un'abbreviazione come parola se fa parte di un nome di classe più lungo." , così DvdPlayerè la strada da percorrere. (E, per Tom, "Usa parole intere ed evita di usare le abbreviazioni a meno che l'abbreviazione non sia più ampiamente utilizzata rispetto alla forma lunga." , E penso che "DVD" sia più ampiamente usato di "Digital Versatile Disc" :-)
aioobe

Sicuramente intendevi "Discus", vero? :)
Ville Oikarinen,

Risposte:


237

Poiché sembra che la risposta sia che non esiste un unico standard per questo in Java, vorrei notare che le Linee guida per la progettazione di .NET Framework lo specificano.

Ora, prima di sbattermi per essere fuori tema, ricorda che le linee guida per la denominazione delle classi per Java e .NET Framework sono abbastanza simili, il che rende le linee guida .NET utili come riferimento persuasivo.

Regole generali

Entrambe le linee guida raccomandano di usare gli acronimi solo quando l'acronimo è ampiamente conosciuto e ben compreso. DVD o XML ne sono un eccellente esempio, poiché mentre li riconoscerai immediatamente, ci vorrebbe un po 'più tempo per riconoscere la versione espansa.

Abbreviazioni

Le Linee guida di .NET Framework raccomandano di non utilizzare abbreviazioni (in contrapposizione agli acronimi), tranne per il fatto che negli identificatori possono essere usate due abbreviazioni comuni "ID" e "OK". Quando si utilizza un'abbreviazione, Idviene sempre utilizzato il caso misto, ad eccezione della prima parola di un identificatore camelCase (al contrario di un identificatore PascalCase).

In Java questa convenzione è seguita solo un po 'di tempo. Dai un'occhiata a quanto sono mescolati gli incantesimi getIDe getIdquelli nel JCL. (Scorri parzialmente verso il basso quella pagina). Nella versione Java 8, tuttavia, getIdviene utilizzato sempre di più, il che suggerisce che la convenzione PascalCase è preferita al giorno d'oggi. È meglio evitare solo abbreviazioni quando possibile.

Acronimi brevi

Le Linee guida di .NET Framework affermano che gli acronimi di due lettere come "IO" dovrebbero avere lo stesso caso per entrambe le lettere. Quindi per gli identificatori PascalCase (come un nome di classe) potresti ottenere DBRate, mentre per un identificatore camelCase (come una variabile locale) potresti avere ioChannel.

Questa sembra sicuramente essere la convenzione prevalente anche in Java.

Acronimi lunghi

Le linee guida di .NET Framework raccomandano che gli acronimi di tre lettere o più utilizzino maiuscole e minuscole per gli identificatori PascalCase e camelCase, ad eccezione della prima parola di un identificatore camelCase. Quindi per un nome di classe potresti avere XmlDocument, mentre una variabile locale potrebbe essere nominata httpRequest.

Questa convenzione non è sempre seguita in Java. Di solito, gli acronimi a quattro caratteri usano un caso misto, ma anche il JCL non è coerente con gli acronimi a tre lettere. La maggior parte di essi sembra essere maiuscola, come "URL", "XML", "SQL" e "DOM", ma ci sono alcune eccezioni come "Jar".

Conclusione

Per Java:

Per acronimi di 4+ lettere, usare maiuscole e minuscole. La libreria standard fa questo, e ha solo un buon senso.

Per gli acronimi a 3 lettere, puoi usare tutte le maiuscole come JCL, oppure puoi usare maiuscole e minuscole come fa .NET Framework. Ad ogni modo, sii coerente.

Per gli acronimi di 2 lettere, utilizzare tutte le lettere maiuscole.

Per le abbreviazioni di 2 lettere, Java non ha davvero uno standard, ma suggerisco di usare maiuscole e minuscole, a meno che la coerenza con altri nomi non apporterebbe un aspetto migliore alle maiuscole.


11
ben messo, bello sforzo!
Eliran Malka,

1
Mi piace questo, tranne per il fatto che non è coerente avere maiuscole e minuscole per gli acronimi a 3 e 2 lettere. (Forse sono molto purista, ma vedi la risposta accettata per motivi pratici. Inoltre, c'è il fattore confusione.)
Jon Coombs,

1
@JCoombs: Beh, l'incoerenza per 2 lettere è per qualcosa del genere IpAddressche sembra terribile per molte persone. Personalmente quando devo scrivere il codice Java, vado con il caso misto per gli acronimi a 3 lettere, lasciando solo le due lettere come un caso speciale.
Kevin Cathcart,

5
Cosa succede se il nome della tua classe ha più acronimi adiacenti di due lettere? Indipendentemente da ciò che fai, sembrerà "sbagliato" - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin

3
Davvero una buona risposta. Ma personalmente non mi piace l'idea delle linee guida di .NET di nominare in modo diverso a seconda della lunghezza degli acronimi e se è o meno un'abbreviazione. Chi se ne frega davvero e controlla la lunghezza di un acronimo? O se è un'abbreviazione? Preferisco una regola generale per la denominazione. Il problema si presenta quando si utilizzano librerie di terze parti con convenzioni diverse da qualsiasi regola si scelga di seguire.
Amani Kilumanga,

98

Non esiste una risposta "corretta". Solo una serie di pratiche e convenzioni che giocano meglio con gli altri tuoi strumenti.

Quindi preferisco DvdPlayer. È più utile come in Eclipse puoi fare Ctrl+ Shift+ Te scegliere le classi dalla prima lettera di ogni parola.

testo alternativo


19
oooo è un utile consiglio per l'eclissi. Grazie!
Peter Perháč,

1
(+1) un buon consiglio. che risponde alla domanda per me :-)
Asaf

2
Solo "SIO" è sufficiente per trovare quella classe.
finnw,

7
Questo funziona anche altrove in Eclipse, ad esempio il completamento automatico. Hai un metodo / variabile chiamato 'myDvdCoverImage'? - basta digitare mDCI Ctrl + Spazio
teabot

3
ci sono anche alcune scorciatoie già impostate, come sysout Ctrl + Spazio, ti dà System.out.println. lo stesso vale per (provare) e (per)
medopal

50

Ho visto entrambi usati allo stato brado e Sun sembra optare per lo DVDPlayerstile. Preferisco DvdPlayer, però, perché in questo modo è chiaro dove si trovano i confini della parola anche se ci sono più acronimi consecutivi, come in HTTPURLConnection.


3
È anche più veloce digitare in questo modo.
Ates Goral,

6
Penso che "DVDPlayer" renda più chiari i confini delle parole. "Dvd" non è una parola, mentre "DVD" è l'acronimo di "Digital Versatile Disc". Quindi i limiti effettivi delle parole in "Lettore DVD" sono "D", "V", "D" e "P".
Greg Brown,

19
@GregBrown: un DVD è un disco con un buco, nessuno tranne te sa il suo nome completo, né se ne frega. Ed è molto più pratico usare DvdPlayer.
Igor Rodriguez,

4
@GregBrown: In effetti è più pratico almeno in Eclipse, dove il riconoscimento del caso del cammello è un problema con gli acronimi: cioè con DvdPlayer puoi digitare "DP" e premere Ctrl + 1 per scegliere di selezionare DvdPlayer, ma se hai avuto DVDPlayer dovresti digitare "DVDP". Ed è ancora più fastidioso se è più lungo. Non vorrei avere un connettore UNESC nel mio codice. Comunque è una questione di scelta.
Igor Rodriguez,

22
Un altro buon esempio è HTTPSID - intendevo HTTP SID o ID HTTPS ... Pertanto, dovrebbe essere scritto rispettivamente HttpSid o HttpsId per spiegare meglio il significato.
Oz Edri,

37

Mi piace definire le singole istanze delle classi nel modo seguente:

Catalogue catalogue;
Person person;

Pertanto, se usassi DVDPlayer, come definirei un'istanza di quello? dVDPlayer? Quindi sceglierei il DvdPlayernome della classe, in modo da poter denominare le istanze come dvdPlayer.


16
Cosa c'è che non va DVDPlayer dvdPlayer;?
azz

9
@DerFlatulator Cosa non c'è che non va? Non importa come sei arrivato dvdPlayer, quando torni, otterrai DvdPlayer.
maaartinus,

5
@DerFlatulator: è una questione di automazione durante la conversione da UpperCamelCase a lowerCamelCase: ho avuto il problema durante l'automazione della mappatura di Hibernate in una snake_case: DvdPlayer -> dvd_playerma DVDPlayer -> d_v_d_player. Non è possibile automatizzare DVDPlayer su dvd_player.
pdem,

3
@DerFlatulator: ok, grazie per la risposta, ha funzionato in questo caso. Ma sono ancora convinto della notazione "DvdPlayer": che dire di DVDRPGPlayer ?, dovrebbe essere convertito in dvdRpgPlayer, non in dvdrpgPlayer.
pdem,

2
Considera anche i tuoi getter e setter: getDvdPlayer()funziona meglio di getDVDPlayer(), ad esempio, se utilizzato con JSP EL (ad es foo.dvdPlayer.). E se stai nominando i tuoi getter con lettere minuscole negli acronimi, è meglio mantenere i nomi delle tue classi uguali per coerenza e prevedibilità.
daiscog,

33

Alcuni esempi delle classi JavaSE, dei comuni di Apache e di Spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Quindi - non importa davvero.


3
Concordato. Sii coerente nella tua base di codice.
JARC

2
Non direi che non importa, anche se questo non è esattamente un grosso problema. Alcuni usi trovano molto utili gli standard generalmente preferiti, anche se non tutti gli altri sono coerenti nel seguirli.
Jon Coombs,

dovrei preferire SRSoltre SoftwareRequirementSpecification?
Shantaram Tupe,


10

Come altri hanno indicato, è una cosa di stile che differisce tra i progetti. I progetti Google come Guava e GWT preferiscono lo DvdPlayerstile.

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


Un link alla convenzione di Google più generale per lo DvdPlayerstile: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel,

1
Il link nella risposta è stato spostato su gwtproject.org/makinggwtbetter.html#codestyle Il link menzionato da @StanKurdziel è stato spostato su google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers

8

Dai documenti di Sun Java :

I nomi delle classi dovrebbero essere nomi, in caso misto con la prima lettera di ogni parola interna in maiuscolo. Cerca di mantenere i nomi delle tue classi semplici e descrittivi. Usa parole intere per evitare acronimi e abbreviazioni (a meno che l'abbreviazione non sia molto più ampiamente utilizzata rispetto alla forma lunga, come URL o HTML).


14
Questo in realtà non dice nulla sul fatto che dovrebbe essere maiuscolo o cammello.
DD.

@DD. Penso che i punti "molto più ampiamente utilizzati" usino le maiuscole per gli acronimi pertinenti (HTTP, GET, ecc.) Che per alcune parole casuali specifiche di business come DVD, MRI, MAGA, ecc.
goelakash,

3

DVDPlayerè lo standard, ma DvdPlayernon è raro.

Più spesso che non vedi getId. Ciò è probabilmente dovuto al fatto che l'ID è un accorciamento di "identità". In realtà sono le iniziali del documento di identità.

HttpURLConnectionviene spesso fornito come esempio di convenzione mista. Tuttavia, "http" utilizzato come nome del protocollo in un URL deve essere in minuscolo (sebbene il maiuscolo sia spesso accettato).


2
Non penso che questo sia davvero uno standard, ma è probabilmente il più comune.
b.

È nel Sun Java Coding Standard, IIRC. Anche se non nel JLS.
Tom Hawtin: affronta il

7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire

2
Sono abbastanza sicuro che molte persone usano ID come abbreviazione di Identifier ... cioè in un database l'ID tabella si riferisce all'identificatore di tabella al documento di identità.
DD.

9
DVDPlayer non è sicuramente lo standard; persino il JDK è incredibilmente incoerente nel loro approccio a questo.
Kevin Bourrillion,

0

Non c'è "corretto", solo preferenze qui.

Sun è coerente nel modo in cui chiamano le classi contenenti "URL" e "HTML", ma vedo HTTP che usa sia maiuscole che minuscole nei javadocs.

Personalmente, preferirei DvdPlayer.


Credo che il nome del protocollo HTTP negli URL dovrebbe essere scritto in minuscolo (sebbene possa essere accettato in maiuscolo dai browser).
Tom Hawtin - affronta il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.