71 votes

Conventions de codage - Nommer les Enums

Existe-t-il une convention pour nommer les énumérations en Java ?

Je préfère qu'un enum soit un type. Donc, par exemple, vous avez un enum

Fruit{Apple,Orange,Banana,Pear, ... }

NetworkConnectionType{LAN,Data_3g,Data_4g, ... }

Je suis opposé à ce qu'on lui donne un nom :

FruitEnum
NetworkConnectionTypeEnum

Je comprends qu'il est facile de choisir les fichiers qui sont des enums, mais alors vous auriez également :

NetworkConnectionClass
FruitClass

Par ailleurs, existe-t-il un bon document décrivant la même chose pour les constantes, où les déclarer, etc.

Walter

129voto

DJClayworth Points 11288

Les Enums sont des classes et doivent respecter les conventions applicables aux classes. Les instances d'un enum sont des constantes et doivent respecter les conventions applicables aux constantes. Ainsi,

enum Fruit {APPLE,ORANGE,BANANA,PEAR};

Il n'y a aucune raison d'écrire FruitEnum, pas plus que FruitClass. Vous ne faites que gaspiller quatre (ou cinq) caractères qui n'apportent aucune information.

Java lui-même recommande cette approche et il est utilisés dans leurs exemples .

29voto

beosign Points 433

Comme il a déjà été dit, les instances d'enum doivent être en majuscules selon les documents du site web d'Oracle ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ).

Cependant, en parcourant un tutoriel JavaEE7 sur le site web d'Oracle ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ), je suis tombé sur le tutoriel "La librairie de Duke" et dans un cours ( tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java ), j'ai trouvé la définition suivante de l'enum :

private enum PropertyKeys {
    alt, coords, shape, targetImage;
}

Selon les conventions, ça aurait dû ressembler à ça :

public enum PropertyKeys {
    ALT("alt"), COORDS("coords"), SHAPE("shape"), TARGET_IMAGE("targetImage");

    private final String val;

    private PropertyKeys(String val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return val;
    }
}

Il semble donc que même les gars d'Oracle échangent parfois convention et commodité.

13voto

StaticNoiseLog Points 39

Cela ne me fera probablement pas gagner beaucoup de nouveaux amis, mais il faut ajouter que les gens de C# ont une ligne directrice différente : Les instances de l'enum sont en "Pascal case" (mélange de majuscules et de minuscules). Voir discussion sur stackoverflow et Directives de dénomination des types d'énumération MSDN .

Comme nous échangeons des données avec un système C#, je suis tenté de copier exactement leurs enums, en ignorant la convention Java "les constantes ont des noms en majuscules". En y réfléchissant, je ne vois pas l'intérêt d'être limité aux majuscules pour les instances d'enum. Dans certains cas, .name() est un raccourci pratique pour obtenir une représentation lisible d'une constante d'énumération et un nom en majuscules et minuscules serait plus joli.

Donc, oui, j'ose remettre en question la valeur de la convention de dénomination des énumérations Java. Le fait que "l'autre moitié du monde de la programmation" utilise effectivement un style différent me fait penser qu'il est légitime de douter de notre propre religion.

6voto

Jim B Points 3121

Dans notre codebase, nous déclarons généralement les enums dans la classe à laquelle ils appartiennent.

Ainsi, pour votre exemple de fruit, nous aurions une classe Fruit, et à l'intérieur de celle-ci une Enum appelée Fruits.

Le référencer dans le code ressemble à ceci : Fruit.Fruits.Apple, Fruit.Fruits.Pear etc.

Les constantes suivent la même ligne, où elles sont soit définies dans la classe à laquelle elles se rapportent (donc quelque chose comme Fruit.ORANGE_BUSHEL_SIZE ) ; ou si elles s'appliquent à l'ensemble du système (c'est-à-dire une "valeur nulle" équivalente pour les ints) dans une classe nommée "ConstantManager" (ou équivalent ; comme ConstantManager.NULL_INT ). (remarque : toutes nos constantes sont en majuscules)

Comme toujours, vos normes de codage diffèrent probablement des miennes, donc YMMV.

3voto

Bill the Lizard Points 147311

Comme il s'agit toujours de types, j'utilise toujours les mêmes conventions d'appellation que pour les classes.

Je désapprouverais certainement l'utilisation de "Class" ou "Enum" dans un nom. Si vous avez à la fois un FruitClass et un FruitEnum alors quelque chose d'autre ne va pas et vous avez besoin de noms plus descriptifs. J'essaie de penser au type de code qui conduirait à avoir besoin des deux, et il me semble qu'il devrait y avoir une fonction Fruit classe de base avec des sous-types au lieu d'une énumération. (Ce n'est que ma propre spéculation cependant, vous pouvez avoir une situation différente de celle que j'imagine).

La meilleure référence que j'ai pu trouver pour nommer les constantes provient de l'ouvrage intitulé Tutoriel sur les variables :

Si le nom que vous choisissez ne comporte qu'un seul mot, écrivez ce mot en lettres minuscules. S'il se compose de plus d'un mot, mettez la première lettre de chaque mot suivant en majuscule. Les noms gearRatio et currentGear sont de bons exemples de cette convention. Si votre variable stocke une valeur constante, telle que static final int NUM_GEARS = 6, la convention change légèrement, en mettant en majuscule chaque lettre et en séparant les mots suivants par le caractère de soulignement. Par convention, le caractère de soulignement n'est jamais utilisé ailleurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X