Convention de dénomination Java avec acronymes [fermé]

218

Quel est le nom correct pour la classe Java suivante: DVDPlayerou DvdPlayer?

DD.
la source
93
Je déteste les acronymes. DigitalVersatileDiscPlayerest la voie à suivre.
Tom Hawtin - tackline
7
+1 à Tom pour la blague. Je trouve cette question utile si "correct" est réinterprété comme "standard" ou "le plus typique". La réponse acceptée est super!
Jon Coombs
6
Pour moi, il est logique de considérer ces acronymes comme un seul mot et, en tant que tel, je respecte la convention et l'utilisation DvdPlayer.
Daniel
7
Le guide de style a à dire à ce sujet: "Formatez une abréviation comme un mot si elle fait partie d'un nom de classe plus long." , DvdPlayerc'est la voie à suivre. (Et, pour Tom, "Utilisez des mots entiers et évitez d'utiliser des abréviations à moins que l'abréviation ne soit plus largement utilisée que la forme longue" , et je pense que "DVD" est plus largement utilisé que "Digital Versatile Disc" :-)
aioobe
Vous vouliez certainement dire "Discus", n'est-ce pas? :)
Ville Oikarinen

Réponses:

237

Comme il semble que la réponse soit qu'il n'y a pas de norme unique pour cela en Java, je voudrais noter que les directives de conception du .NET Framework le spécifient.

Maintenant, avant de me critiquer pour être hors sujet, n'oubliez pas que les directives de dénomination des classes pour Java et .NET Framework sont assez similaires, ce qui rend les directives .NET utiles comme référence persuasive.

Règles générales

Les deux lignes directrices recommandent d'utiliser uniquement des acronymes lorsque l'acronyme est largement connu et bien compris. Les DVD ou XML en sont d'excellents exemples, car même si vous les reconnaîtrez immédiatement, il faudrait un peu plus de temps pour reconnaître la version étendue.

Abréviations

Les directives du .NET Framework recommandent de ne pas utiliser d'abréviations (par opposition aux acronymes), sauf que deux abréviations courantes «ID» et «OK» peuvent être utilisées dans les identificateurs. Lors de l'utilisation d'une abréviation, la casse mixte Idest toujours utilisée sauf pour le premier mot d'un identifiant camelCase (par opposition à un identifiant PascalCase).

En Java, cette convention n'est suivie que de temps en temps. Jetez un œil à la façon dont les orthographes sont mélangées getIDet getIddans le JCL. (Faites défiler à mi-chemin sur cette page). Dans la version Java 8, cependant, getIdest de plus en plus utilisé, ce qui laisse entendre que la convention PascalCase est préférée de nos jours. Il est préférable d'éviter simplement les abréviations lorsque cela est possible.

Acronymes courts

Les directives du .NET Framework indiquent que les acronymes à deux lettres comme «IO» devraient avoir le même cas pour les deux lettres. Donc, pour les identifiants PascalCase (comme un nom de classe), vous obtiendriez DBRate, tandis que pour un identifiant camelCase (comme une variable locale), vous pourriez en avoir ioChannel.

Cela semble certainement être la convention dominante à Java également.

Acronymes longs

Les directives .NET Framework recommandent que les acronymes de trois lettres ou plus utilisent une casse mixte pour les identifiants PascalCase et camelCase, à l'exception du premier mot d'un identifiant camelCase. Ainsi, pour un nom de classe, vous pourriez avoirXmlDocument , alors qu'une variable locale pourrait être nommée httpRequest.

Cette convention n'est pas toujours suivie en Java. Les acronymes à quatre caractères semblent généralement utiliser des majuscules, mais même le JCL n'est pas cohérent avec les acronymes à trois lettres. La plupart d'entre eux semblent tout en majuscules, comme «URL», «XML», «SQL» et «DOM», mais il existe quelques exceptions comme «Jar».

Conclusion

Pour Java:

Pour les acronymes de 4 lettres ou plus, utilisez la casse mixte. La bibliothèque standard fait cela, et c'est tout à fait logique.

Pour les acronymes de 3 lettres, vous pouvez utiliser tous les majuscules comme le JCL, ou vous pouvez utiliser des majuscules comme le .NET Framework. Quoi qu'il en soit, soyez cohérent.

Pour les acronymes de 2 lettres, utilisez tout en majuscules.

Pour les abréviations à 2 lettres, Java n'a pas vraiment de standard, mais je suggère d'utiliser une casse mixte, sauf si la cohérence avec d'autres noms rendrait tous les majuscules plus beaux.

Kevin Cathcart
la source
11
bien mis, bel effort!
Eliran Malka
1
J'aime ça, sauf qu'il n'est pas cohérent d'avoir des CAPS pour les acronymes à 3 et 2 lettres. (Je suis peut-être trop puriste, mais voyez la réponse acceptée pour des raisons pratiques. De plus, il y a le facteur de confusion.)
Jon Coombs
1
@JCoombs: Eh bien, l'incohérence pour 2 lettres est quelque chose IpAddressqui semble terrible à beaucoup de gens. Personnellement, quand j'ai besoin d'écrire du code Java, je choisis des acronymes à 3 lettres, en ne laissant que les deux lettres comme cas spécial.
Kevin Cathcart
5
Que faire si le nom de votre classe comporte plusieurs acronymes adjacents à deux lettres? Indépendamment de ce que vous faites, cela semblera `` faux '' - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin
3
Vraiment une bonne réponse. Mais personnellement, je n'aime pas l'idée des directives .NET de nommer différemment selon la longueur des acronymes et s'il s'agit ou non d'une abréviation. Qui se soucie réellement et vérifie la longueur d'un acronyme? Ou si c'est une abréviation? Je préfère une règle générale pour nommer. Le problème survient lors de l'utilisation de bibliothèques tierces avec des conventions différentes de la règle que vous avez choisie.
Amani Kilumanga
98

Il n'y a pas de réponse "correcte". Juste un ensemble de pratiques et de conventions qui jouent mieux avec vos autres outils.

Je préfère donc DvdPlayer. C'est plus utile car dans Eclipse vous pouvez faire Ctrl+ Shift+ Tet choisir des classes par la première lettre de chaque mot.

texte alternatif

fil volant
la source
19
oooo c'est une astuce d'éclipse utile. Merci!
Peter Perháč
1
(+1) un bon conseil. qui répond à la question pour moi :-)
Asaf
2
Il suffit de "SIO" pour trouver cette classe.
finnw
7
Cela fonctionne également ailleurs dans Eclipse - l'auto-complétion par exemple. Vous avez une méthode / variable nommée 'myDvdCoverImage'? - tapez simplement mDCI Ctrl + Espace
teabot
3
il existe également des raccourcis déjà définis, comme sysout Ctrl + Space, vous donne System.out.println. il en va de même pour (essayer) et (pour)
medopal
50

Je les ai vus tous les deux utilisés à l'état sauvage, et Sun semble aller pour le DVDPlayerstyle. Je préfère DvdPlayer, cependant, car de cette façon, il est clair où se trouvent les limites des mots même s'il existe plusieurs acronymes consécutifs, comme dans HTTPURLConnection.

JaakkoK
la source
3
Il est également plus rapide de taper de cette façon.
Ates Goral
6
Je pense que "DVDPlayer" rend les limites des mots plus claires. "Dvd" n'est pas un mot, alors que "DVD" est un acronyme pour les mots "Digital Versatile Disc". Ainsi, les limites réelles des mots dans "Lecteur DVD" sont "D", "V", "D" et "P".
Greg Brown
19
@GregBrown: Un DVD est un disque avec un trou, personne sauf vous ne connaît son nom complet, ni s'en soucie. Et il est beaucoup plus pratique d'utiliser DvdPlayer.
Igor Rodriguez
4
@GregBrown: En fait, c'est plus pratique au moins dans Eclipse, où la reconnaissance des cas de chameaux est un problème avec les acronymes: c'est-à-dire qu'avec DvdPlayer vous pouvez taper "DP" et appuyer sur Ctrl + 1 pour avoir le choix de sélectionner DvdPlayer, mais si vous aviez DVDPlayer, vous devez taper "DVDP". Et c'est encore plus ennuyeux s'il est plus long. Je ne voudrais pas avoir un UNESCOConnector dans mon code. Quoi qu'il en soit, c'est une question de choix.
Igor Rodriguez
22
Un autre bon exemple est HTTPSID - est-ce que je voulais dire HTTP SID ou HTTPS ID ... Par conséquent, il devrait être écrit HttpSid ou HttpsId respectivement pour mieux expliquer la signification.
Oz Edri
37

J'aime définir des instances individuelles de classes de la manière suivante:

Catalogue catalogue;
Person person;

Par conséquent, si j'utilisais DVDPlayer, comment pourrais-je appeler une instance de cela? dVDPlayer? Par conséquent, je choisirais le DvdPlayernom de la classe, afin que vous puissiez nommer les instances comme dvdPlayer.

Peter Perháč
la source
16
Qu'est-ce qui ne va pas DVDPlayer dvdPlayer;?
azz
9
@DerFlatulator Qu'est-ce qui ne va pas? Peu importe comment vous en êtes arrivé dvdPlayer, quand vous reviendrez, vous obtiendrez DvdPlayer.
maaartinus
5
@DerFlatulator: c'est une question d'automatisation lors de la conversion de UpperCamelCase en lowerCamelCase: J'ai eu le problème lors de l'automatisation du mappage Hibernate dans un snake_case: DvdPlayer -> dvd_playermais DVDPlayer -> d_v_d_player. Il n'y a aucun moyen d'automatiser DVDPlayer vers dvd_player.
pdem
3
@DerFlatulator: d'accord, merci pour la réponse, cela a fonctionné dans ce cas. Mais je suis toujours convaincu par la notation "DvdPlayer": qu'en est-il de DVDRPGPlayer?, Il devrait être converti en dvdRpgPlayer, pas en dvdrpgPlayer.
pdem
2
Pensez également à vos getters et setters: getDvdPlayer()fonctionne mieux que getDVDPlayer(), par exemple, lorsqu'il est utilisé avec JSP EL (par exemple, foo.dvdPlayer). Et si vous nommez vos getters en minuscules dans les acronymes, il est préférable de conserver les noms de vos classes pour la cohérence et la prévisibilité.
daiscog
33

Quelques exemples des classes JavaSE, apache commons et spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Donc - ça n'a pas vraiment d'importance.

Bozho
la source
3
D'accord. Soyez juste cohérent dans votre base de code.
JARC
2
Je ne dirais pas que cela n'a pas d'importance, bien que celui-ci ne soit pas vraiment un gros problème. Certains utilisateurs trouvent les normes généralement préférées très utiles, même si tout le monde n'est pas cohérent quant à leur respect.
Jon Coombs
dois - je préfère SRSplus SoftwareRequirementSpecification?
Shantaram Tupe
24

Java efficace semble préférer DvdPlayer.

Brian Harris
la source
10

Comme d'autres l'ont indiqué, c'est une chose de style qui diffère selon les projets. Les projets Google tels que Guava et GWT préfèrent le DvdPlayerstyle.

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

Steven Benitez
la source
Un lien de convention Google plus général pour le DvdPlayerstyle: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel
1
Le lien dans la réponse a été déplacé vers gwtproject.org/makinggwtbetter.html#codestyle Le lien mentionné par @StanKurdziel a été déplacé vers google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers
8

De la documentation de Sun Java :

Les noms de classe doivent être des noms, en casse mixte avec la première lettre de chaque mot interne en majuscule. Essayez de garder vos noms de classe simples et descriptifs. Utilisez des mots entiers - évitez les acronymes et les abréviations (sauf si l'abréviation est beaucoup plus largement utilisée que la forme longue, comme URL ou HTML).

codaddict
la source
14
Cela ne dit vraiment rien sur le fait qu'il s'agisse de majuscules ou de chameaux.
DD.
@DD. Je pense que des points "beaucoup plus largement utilisés" pour utiliser des majuscules pour les acronymes pertinents (HTTP, GET, etc.) que pour certains mots aléatoires spécifiques à l'entreprise comme DVD, MRI, MAGA, etc.
goelakash
3

DVDPlayer est la norme, mais DvdPlayer n'est pas rare.

Vous voyez le plus souvent getId. Cela est probablement dû au fait que l'identification est un raccourcissement de «l'identité». Il s'agit en fait des initiales du document d'identité.

HttpURLConnectionest souvent donné comme exemple de convention mixte. Cependant, "http" utilisé comme nom de protocole dans une URL doit être en minuscules (bien que les majuscules soient souvent acceptées).

Tom Hawtin - sellerie
la source
2
Je ne pense pas que ce soit vraiment une norme, mais c'est probablement la plus courante.
b.roth
C'est dans le Sun Java Coding Standard, IIRC. Mais pas dans le JLS.
Tom Hawtin - tackline
7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire
2
Je suis à peu près sûr que la plupart des gens utilisent ID comme abréviation d'identifiant ... c'est-à-dire que dans une base de données, l'ID de table fait référence à l'identifiant de table du document d'identité.
DD.
9
DVDPlayer n'est certainement pas la norme; même le JDK est extrêmement incohérent dans son approche à cet égard.
Kevin Bourrillion
0

Il n'y a pas de "correct", seulement des préférences ici.

Sun est cohérent dans la façon dont ils nomment les classes contenant "URL" et "HTML", mais je vois HTTP utilisant à la fois toutes les majuscules et le cas de chameau dans les javadocs.

Personnellement, je préfère DvdPlayer.

duffymo
la source
Je crois que le nom du protocole HTTP dans les URL doit être écrit en minuscules (bien qu'il puisse être accepté en majuscules par les navigateurs).
Tom Hawtin - tackline