332 votes

Convention d'appellation des Enum - Pluriel

Je pose cette question alors que j'ai déjà lu des documents similaires, mais qui ne correspondent pas exactement à ce que je veux. Convention de dénomination C# pour les enum et les propriétés correspondantes

J'ai constaté que j'ai tendance à nommer les enums au pluriel et à les "utiliser" au singulier, par exemple :

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

Bien sûr, cela fonctionne et c'est mon style, mais quelqu'un peut-il trouver un problème potentiel avec cette convention ? J'ai cependant un nom "laid" avec le mot "Statut" :

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

Informations supplémentaires : Peut-être que ma question n'était pas assez claire. Je dois souvent réfléchir pour nommer les variables des types d'enum que j'ai définis. Je connais la meilleure pratique, mais cela ne m'aide pas à faciliter la tâche de nommer ces variables.

Je ne peux pas exposer toutes les propriétés de mon enum (disons "Status") comme "MyStatus".

Ma question : Quelqu'un peut-il trouver un problème potentiel avec ma convention décrite ci-dessus ? Il ne s'agit PAS de meilleures pratiques.

Reformulation de la question :

Eh bien, je suppose que je devrais poser la question de cette façon : Quelqu'un peut-il trouver un bon moyen générique de nommer le type d'énumération de telle sorte que, lorsqu'il est utilisé, le nom de l'"instance" de l'énumération soit assez simple ?

6 votes

Public enum OrderState... - public OrderState OrderStatus { get ; set;}

405voto

Jason Points 125291

Microsoft recommande d'utiliser le singulier pour Enum à moins que le Enum représente des champs de bits (utilisez l'option FlagsAttribute également). Voir Conventions d'appellation des types d'énumération (un sous-ensemble du programme Directives d'attribution de noms ).

Pour répondre à votre précision, je ne vois rien de mal à ce qui suit :

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass { 
    public OrderStatus OrderStatus { get; set; }
}

ou

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass {
    public OrderStatus Status { get; set; }
}

28 votes

Oui, c'est une réponse correcte. Ces lignes directrices sont utilisées dans le Framework .Net, par exemple l'enum DayOfWeek et les flags enum RegexOptions.

3 votes

Oui, c'est la pratique recommandée, je m'en félicite. Cependant, cela ne répond pas à ma question.

1 votes

@o.k.w pour élaborer davantage, bien que cela semble laid, si vous avez besoin d'une seule valeur d'un enum de drapeaux, utilisez la forme singulière pour le champ/la propriété/l'argument. Si vous souhaitez que plusieurs drapeaux soient définis, utilisez le pluriel. Si votre enum n'est pas un flags enum, utilisez le singulier pour le nom du type et le champ/la propriété/l'argument.

46voto

Bob Kaufman Points 6748

J'ai commencé à nommer les enums au pluriel mais j'ai depuis changé pour le singulier. Cela semble plus logique dans le contexte où ils sont utilisés.

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

Comparer à :

Statuses myStatus = Statuses.Ready;

Je trouve que la forme singulière sonne plus naturelle dans le contexte. Nous sommes d'accord sur le fait que lorsque nous déclarons l'enum, ce qui n'arrive qu'à un seul endroit, nous pensons "c'est un groupe de choses", mais que lorsque nous l'utilisons, vraisemblablement à de nombreux endroits, nous pensons "c'est une chose".

6 votes

Une réaction un peu tardive (et peut-être un peu hors sujet) mais : je suggérerais d'utiliser la valeur 0 pour la valeur inconnue, de cette façon une variable non initialisée est par défaut Unknown .

0 votes

D'accord, @SvenL. J'ai mis à jour l'exemple en conséquence.

1 votes

Voulez-vous vraiment mettre un [Flags] attribut sur votre exemple cependant ? Cela n'a pas de sens qu'un élément ait à la fois le statut "Incomplet" et "Prêt". Si vous aviez enum [Flags]Steps { First, Second, Third } vous nommeriez vraiment votre variable completedStep ?

32voto

Kyle Rozendo Points 15606

La situation ne s'applique jamais vraiment au pluriel.

Un site enum montre un attribut de quelque chose ou d'un autre. Je vais vous donner un exemple :

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

Vous pouvez avoir un seul type, mais essayez d'y penser au multiple, plutôt qu'au pluriel :

Humour.Irony | Humour.Sarcasm

Plutôt que de

Humours { Irony, Sarcasm }

Vous avez le sens de l'humour, vous n'avez pas le sens de l'humour.

12 votes

Haha, eh bien, les programmeurs ne sont pas toujours grammaticalement/politiquement corrects. Dans votre cas, j'utilise probablement "HumourTypes". Une mauvaise habitude je suppose.

1 votes

Si je veux rechercher tous les individus qui ont un sens du sarcasme OU un sens de l'ironie, ne devrais-je pas passer la routine de recherche par une instance de Humours contenant Humours.Irony | Huomours.Sarcasm ? ?

16voto

Charles Bretana Points 59899

En général, la meilleure pratique recommandée est le singulier, sauf pour les enums auxquels l'attribut [Flags] est attaché (et qui peuvent donc contenir des champs de bits), qui doivent être au pluriel.

Après avoir lu votre question, j'ai l'impression que vous pensez que le nom de la propriété ou de la variable doit être différent du nom du type d'enum... Ce n'est pas le cas. Ce qui suit est tout à fait correct...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }

0 votes

C'est vrai, je suppose que ma méthode est un moyen "rapide et paresseux" d'éviter de devoir penser aux noms lors de l'utilisation des enums.

1 votes

Pour étayer votre réponse : sur MSDN, de Noms des membres de type dans la section "Noms des propriétés" : CONSIDERER donner à une propriété le même nom que son type. Exemple : public Color Color { get {...} set {...} }

6voto

Jeremy Cron Points 1377

Meilleure pratique - utiliser le singulier. Vous avez une liste d'éléments qui constituent une Enum. L'utilisation d'un élément de la liste semble étrange lorsque vous dites Versions.1_0 . Il est plus logique de dire Version.1_0 puisqu'il n'y a qu'une seule version 1_0.

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