Singulier ou pluriel pour les énumérations?

92

Utilisez-vous le singulier ou le pluriel pour les énumérations? Je pense qu'il est préférable d'utiliser le pluriel dans la déclaration

enum Weekdays
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

... mais je pense que cela a plus de sens avec le singulier lors de l'utilisation du type, par exemple

Weekday firstDayOfWeek = Weekday.Monday;

J'ai lu une recommandation quelque part pour utiliser le singulier avec des énumérations régulières et le pluriel avec des indicateurs, mais j'aimerais entendre d'autres avantages et inconvénients.

Jan Aagaard
la source
Devrait être des énumérations, pas des énumérateurs.
Reed Copsey

Réponses:

92

Le voici directement de Microsoft:

http://msdn.microsoft.com/en-us/library/4x252001(VS.71).aspx

Utilisez un nom singulier pour la plupart des types Enum, mais utilisez un nom pluriel pour les types Enum qui sont des champs de bits.

Matt Ruwe
la source
1
Avec la note que les champs de bits doivent être pluralisés.
M. Dudley
2
Voici la dernière version des directives MSDN pour la conception d'énumération: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley
Un livre que je suis très reconnaissant d'avoir lu est le Framework Design Guidelines . Fondamentalement, il est écrit par plus de 15 auteurs qui ont tous joué un rôle important dans le développement du framework .NET au fil des ans. Le livre vous donne un aperçu de leur processus de réflexion lorsqu'ils développent les API du framework, et ce faisant, vous rend à la limite de la clairvoyance lorsqu'il s'agit de naviguer dans n'importe quel framework Microsoft, boîte à outils, etc. site Web docs, mais cela le rend très bien.
déséquilibré
30

Une recommandation provient des directives de conception .NET Framework , page 59-60:

N'utiliser un nom de type singulier pour une énumération, à moins que ses valeurs sont des champs de bits.

public enum ConsoleColor {
  Black,
  Blue,
  Cyan,
  ...

N'utiliser un nom de type pluriel pour une énumération avec des champs de bits comme des valeurs, également appelé ENUM de drapeaux.

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
Michael Petrotta
la source
13

Dans le .NET Framework, la plupart des énumérations « normaux » (par exemple DayOfWeek) ont des noms singuliers et énumérations drapeau (par exemple StringSplitOptions, BindingFlags) ont des noms au pluriel. Cela a du sens, puisqu'une valeur d'une énumération d'indicateur peut représenter plusieurs éléments, mais pour une énumération non d'indicateur, elle ne peut représenter qu'un seul élément.

Mehrdad Afshari
la source
5

En général, je considère qu'une définition enum est une définition de type, les valeurs de l'énumération étant les différentes valeurs que le type peut avoir; donc il obtient un nom singulier: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Oui. Si vous faites l'expérience mentale de l'implémentation des énumérations en tant que classes, le fait que vous utilisiez un nom singulier pour le type devrait révéler qu'il est logique d'utiliser des noms singuliers pour ces énumérations. Par exemple,

struct Weekday {};

const Weekday SUNDAY;
const Weekday MONDAY;
const Weekday TUESDAY;

...

void func (Weekday *day)
{
   if (day == &SUNDAY)
       ...
}

Pour qui préfère les pluriels dans les énumérations, nommeriez-vous cela struct Weekdays?

Pedro Alves
la source
2

En général, je considère qu'une définition enum est une définition de type, les valeurs de l'énumération étant les différentes valeurs que le type peut avoir; donc il obtient un nom singulier:

enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };

enum CoffeeSize { SMALL, MEDIUM, LARGE };
Avi
la source
2

Microsoft recommande d' utiliser un nom unique pour les énumérations, sauf s'il utilise l' Flagsattribut. Et comme tiré du livre Framework Design Guidelines, vous ne devez pas suffixer les noms de type d'énumération avec Enum, Flags, etc.

Brian Gideon
la source
Mais y a-t-il réellement une raison pour laquelle? Nous préfixons les interfaces avec «I». Pourquoi ne pas préfixer les énumérations avec «E» et les drapeaux avec «F». Cela rendrait les choses claires. Notez que je n'aime pas préfixer quoi que ce soit d'autre, mais ce sont des cas particuliers comme l'interface où le type ne changera jamais.
0

C'est subjectif et peu importe ce que vous utilisez, tant que vous êtes cohérent (personnellement, j'utilise le singulier car c'est un report de mes conventions SQL)

Jaimal Chohan
la source
11
Cela compte. Les conventions favorisent la lisibilité et la maintenabilité. La cohérence personnelle ne se compare pas à la cohérence conventionnelle.
grenade
1
Difficile d'être cohérent si chaque bibliothèque a sa propre opinion «subjective».
Paul Biggar
1
Je suppose que comme Microsoft dit utiliser le singulier, nous devrions TOUS utiliser le singulier. Nan. Tant que vous êtes cohérent avec votre plualisation et votre singularisation (?), Cela n'a vraiment pas d'importance.
Jaimal Chohan