Singular ou plural para enumerações?

95

Você usa singular ou plural para enumerações? Acho que faz mais sentido com plural na declaração

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

... mas acho que faz mais sentido com o singular ao usar o tipo, por exemplo

Weekday firstDayOfWeek = Weekday.Monday;

Eu li uma recomendação em algum lugar para usar singular com enums regulares e plural com sinalizadores, mas gostaria de ouvir mais alguns prós e contras.

Jan Aagaard
fonte
Devem ser enumerações, não enumeradores.
Reed Copsey

Respostas:

95

Aqui, vem direto da Microsoft:

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

Use um nome no singular para a maioria dos tipos de Enum, mas use um nome no plural para os tipos de Enum que são campos de bits.

Matt Ruwe
fonte
1
Com a observação de que os campos de bits devem ser pluralizados.
M. Dudley de
2
Esta é a versão mais recente das Diretrizes do MSDN para Design de Enumeração: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley
Um livro que sou muito grato por ter lido é o Framework Design Guidelines . Basicamente, foi escrito por mais de 15 autores que desempenharam papéis importantes no desenvolvimento do framework .NET ao longo dos anos. O livro oferece uma visão do processo de pensamento deles ao desenvolver as APIs do framework e, ao fazê-lo, torna-o quase um clarividente quando se trata de navegar em qualquer framework, kit de ferramentas da Microsoft, etc. Muitos, se não todo o texto, podem ser encontrados em seus docs site, mas isso o empacota muito bem.
Desequilibrado de
30

Uma recomendação vem das Diretrizes de Design do .NET Framework , páginas 59-60:

Não use um nome de tipo singular de uma enumeração, a menos que seus valores são campos de bits.

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

Não use um nome de tipo plural para uma enumeração com campos de bits como valores, também chamado de enumeração bandeiras.

[Flags]
public enum ConsoleModifiers {
  Alt,
  Control,
  Shift
}
Michael Petrotta
fonte
14

No .NET Framework, a maioria dos enums "normais" (por exemplo DayOfWeek) tem nomes no singular e os enums de sinalizador (por exemplo StringSplitOptions, BindingFlags) têm nomes no plural. Faz sentido, uma vez que um valor de enum sinalizador pode representar vários itens, mas para um enum não sinalizador, ele só pode representar um único item.

mmx
fonte
5

Em geral, considero uma definição de enum uma definição de tipo, com os valores de enum sendo os diferentes valores que o tipo pode ter; portanto, recebe um nome singular: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Sim. Se você fizer a experiência mental de implementar os enums como classes, o fato de usar um nome no singular para o tipo deve revelar que faz sentido usar nomes no singular para esses enums. Por exemplo,

struct Weekday {};

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

...

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

Para quem prefere plurais em enums, você nomeia isso struct Weekdays?

Pedro Alves
fonte
2

Em geral, considero uma definição de enum uma definição de tipo, com os valores de enum sendo os diferentes valores que o tipo pode ter; portanto, recebe um nome singular:

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

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

A Microsoft recomenda usar um nome singular para enumerações, a menos que use o Flagsatributo. E, conforme tirado do livro Framework Design Guidelines, você não deve sufocar nomes de tipo de enumeração com Enum, Flags, etc. e você não deve prefixar valores de enumeração com uma abreviação ou acrônimo como era comum nas enumerações VB naquela época.

Brian Gideon
fonte
Mas existe realmente uma razão para isso? Prefixamos as interfaces com 'I'. Por que não prefixar enums com 'E' e sinalizadores com 'F'. Isso deixaria muito claro. Observe que não gosto de prefixar mais nada, mas esses são casos especiais, como interface onde o tipo nunca muda.
0

É subjetivo e não importa o que você usa, contanto que você seja consistente (pessoalmente, eu uso o singular porque é uma herança das minhas convenções SQL)

Jaimal Chohan
fonte
11
Isto é importante. As convenções promovem a legibilidade e a manutenção. A consistência pessoal não se compara à consistência convencional.
granada de
1
É difícil ser consistente se cada biblioteca tem sua própria opinião "subjetiva".
Paul Biggar de
1
Acho que, como a Microsoft diz, use o singular, TODOS devemos usar o singular. Não. Contanto que você seja consistente com sua plualização e singularização (?), Isso realmente não importa.
Jaimal Chohan de