¿Singular o plural para enumeraciones?

92

¿Utiliza singular o plural para enumeraciones? Creo que tiene más sentido con plural en la declaración.

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

... pero creo que tiene más sentido con singular cuando se usa el tipo, por ejemplo

Weekday firstDayOfWeek = Weekday.Monday;

Leí una recomendación en alguna parte para usar singular con enumeraciones regulares y plural con banderas, pero me gustaría escuchar algunos pros y contras.

Jan Aagaard
fuente
Deben ser enumeraciones, no enumeradores.
Reed Copsey

Respuestas:

92

Aquí es directamente de Microsoft:

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

Use un nombre singular para la mayoría de los tipos Enum, pero use un nombre plural para los tipos Enum que son campos de bits.

Matt Ruwe
fuente
1
Con la nota de que los campos de bits deben estar pluralizados.
M. Dudley
2
Aquí está la última versión de las Pautas de MSDN para el diseño de enumeraciones: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley
Un libro del que estoy muy agradecido por haber leído es Framework Design Guidelines . Básicamente, está escrito por más de 15 autores que desempeñaron un papel importante en el desarrollo de .NET Framework a lo largo de los años. El libro le da una idea de su proceso de pensamiento cuando desarrollan las API de marco y, al hacerlo, lo hace casi clarividente cuando se trata de navegar por cualquier marco, kit de herramientas, etc. de Microsoft. Muchos, si no todo, el texto se puede encontrar en su docs, pero esto lo empaqueta muy bien.
Ladeado
30

Una recomendación proviene de las Pautas de diseño de .NET Framework , páginas 59-60:

No utilice un nombre de tipo singular de una enumeración, a menos que sus valores son campos de bits.

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

No utilice un nombre de tipo plural para una enumeración con campos de bits como valores, también llamado una enumeración banderas.

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

En .NET Framework, la mayoría de enumeraciones "normales" (por ejemplo DayOfWeek) tienen nombres en singular y las enumeraciones de banderas (por ejemplo StringSplitOptions, BindingFlags) tienen nombres en plural. Tiene sentido, ya que un valor de una enumeración de bandera puede representar varios elementos, pero para una enumeración que no es de bandera, solo puede representar un solo elemento.

Mehrdad Afshari
fuente
5

En general, considero que una definición de enumeración es una definición de tipo, siendo los valores de la enumeración los diferentes valores que puede tener el tipo; por lo tanto, recibe un nombre singular: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Si. Si tiene la experiencia mental de implementar las enumeraciones como clases, entonces el hecho de que use un nombre singular para el tipo debería revelar que tiene sentido usar nombres singulares para tales enumeraciones. P.ej,

struct Weekday {};

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

...

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

Para quién prefiere los plurales en las enumeraciones, ¿lo nombrarías struct Weekdays?

Pedro Alves
fuente
2

En general, considero que una definición de enumeración es una definición de tipo, siendo los valores de la enumeración los diferentes valores que puede tener el tipo; por lo tanto, recibe un nombre singular:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };
Avi
fuente
2

Microsoft recomienda usar un nombre singular para las enumeraciones a menos que use el Flagsatributo. Y, como se tomó del libro Framework Design Guidelines, no debe agregar un sufijo a los nombres de los tipos de enumeración con Enum, Flags, etc. y no debe agregar un prefijo a los valores de enumeración con una abreviatura o un acrónimo como era común con las enumeraciones VB en el día.

Brian Gideon
fuente
Pero, ¿existe realmente una razón por la cual? Prefijamos interfaces con 'I'. ¿Por qué no prefijar enumeraciones con 'E' y banderas con 'F'? Eso lo dejaría muy claro. Tenga en cuenta que no me gusta prefijar nada más, pero estos son casos especiales como la interfaz donde el tipo nunca cambiará.
0

Es subjetivo y no importa lo que use, siempre y cuando sea consistente (personalmente, uso singular como una transferencia de mis convenciones Sql)

Jaimal Chohan
fuente
11
Si importa. Las convenciones promueven la legibilidad y la facilidad de mantenimiento. La consistencia personal no se compara con la consistencia convencional.
granada
1
Es difícil ser coherente si cada biblioteca tiene su propia opinión "subjetiva".
Paul Biggar
1
Supongo que, como dice Microsoft, use singular, TODOS deberíamos usar singular. ¡No! Siempre que sea coherente con su plualización y singularización (?), Realmente no importa.
Jaimal Chohan