Singolare o plurale per enumerazioni?


92

Usi il singolare o il plurale per le enumerazioni? Penso che abbia più senso con il plurale nella dichiarazione

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

... ma penso che abbia più senso con singolare quando si usa il tipo, ad es

Weekday firstDayOfWeek = Weekday.Monday;

Ho letto una raccomandazione da qualche parte per usare singolare con enumerazioni regolari e plurale con flag, ma mi piacerebbe sentire altri pro e contro.


Dovrebbero essere enumerazioni, non enumeratori.
Reed Copsey

Risposte:


92

Eccolo direttamente da Microsoft:

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

Utilizzare un nome singolare per la maggior parte dei tipi di Enum, ma utilizzare un nome plurale per i tipi di Enum che sono campi di bit.


1
Con la nota che i campi di bit dovrebbero essere pluralizzati.
M. Dudley

2
Ecco l'ultima versione delle linee guida MSDN per la progettazione dell'enumerazione
Rodney S. Foley

Un libro di cui sono molto grato di aver letto è il Framework Design Guidelines . Fondamentalmente è scritto da oltre 15 autori che hanno tutti svolto un ruolo importante nello sviluppo di .NET framework nel corso degli anni. Il libro ti dà un'idea del loro processo di pensiero quando sviluppano le API del framework, e così facendo ti rende chiaroveggente al limite quando si tratta di navigare in qualsiasi framework Microsoft, toolkit, ecc. Molti se non tutto il testo può essere trovato nel loro docs, ma questo lo impacchetta molto bene.
sbilenco

30

Una raccomandazione proviene dalle linee guida per la progettazione di .NET Framework , pagina 59-60:

Non utilizzare un nome di tipo singolare per un'enumerazione, a meno che i suoi valori sono campi di bit.

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

Non utilizzare un nome di tipo plurale per un'enumerazione con campi di bit come valori, chiamato anche un enum bandiere.

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}

13

In .NET Framework, la maggior parte delle enumerazioni "normali" (per esempio DayOfWeek) hanno nomi singolari e enumerazioni bandiera (ad esempio StringSplitOptions, BindingFlags) hanno nomi plurali. Ha senso, poiché un valore di un'enumerazione flag può rappresentare più elementi ma per un'enumerazione non flag può rappresentare solo un singolo elemento.


5

In generale, considero una definizione di enum una definizione di tipo, con i valori dell'enum che sono i diversi valori che il tipo può avere; quindi prende un nome singolare: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Sì. Se fai l'esperienza mentale di implementare le enumerazioni come classi, il fatto che useresti un nome singolare per il tipo dovrebbe rivelare che ha senso usare nomi singolari per tali enumerazioni. Per esempio,

struct Weekday {};

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

...

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

Per chi preferisce i plurali in enumerazione, lo chiameresti struct Weekdays?


2

In generale, considero una definizione di enum una definizione di tipo, con i valori dell'enum che sono i diversi valori che il tipo può avere; quindi prende un nome singolare:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

2

Microsoft consiglia di utilizzare un nome singolare per le enumerazioni a meno che non utilizzi l' Flagsattributo. E come tratto dal libro Framework Design Guidelines, non dovresti aggiungere come suffisso ai nomi dei tipi di enumerazione Enum, Flags, ecc. E non dovresti anteporre ai valori di enumerazione un'abbreviazione o un acronimo come era comune con le enumerazioni VB nel corso della giornata.


Ma c'è davvero un motivo per cui? Abbiamo prefisso le interfacce con "I". Perché non anteporre le enumerazioni con "E" e i flag con "F". Ciò renderebbe tutto chiaro. Nota che non mi piace aggiungere altri prefissi, ma questi sono casi speciali come l'interfaccia in cui il tipo non cambierà mai.

0

È soggettivo e non importa cosa usi, purché tu sia coerente (personalmente uso singolare perché è un riporto dalle mie convenzioni Sql)


11
Importa. Le convenzioni promuovono la leggibilità e la manutenibilità. La coerenza personale non è paragonabile alla coerenza convenzionale.
granata

1
Difficile essere coerenti se ogni biblioteca ha la propria opinione "soggettiva".
Paul Biggar,

1
Immagino che come dice Microsoft usa singular, dovremmo TUTTI usare singular. No. Finché sei coerente con la tua plualizzazione e singolarizzazione (?), Davvero non importa.
Jaimal Chohan

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.