Singular oder Plural für Aufzählungen?

90

Verwenden Sie Singular oder Plural für Aufzählungen? Ich denke, dass es mit dem Plural in der Erklärung am besten Sinn macht

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

... aber ich denke, es macht mit Singular mehr Sinn, wenn man den Typ verwendet, z

Weekday firstDayOfWeek = Weekday.Monday;

Ich habe irgendwo eine Empfehlung gelesen, Singular mit regulären Aufzählungen und Plural mit Flaggen zu verwenden, aber ich würde gerne weitere Vor- und Nachteile hören.

Jan Aagaard
quelle
Sollte Aufzählungen sein, keine Aufzähler.
Reed Copsey
1
Siehe auch
harpo

Antworten:

90

Hier ist es direkt von Microsoft:

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

Verwenden Sie für die meisten Aufzählungstypen einen singulären Namen, für Aufzählungstypen, die Bitfelder sind, einen Pluralnamen.

Matt Ruwe
quelle
1
Mit dem Hinweis, dass Bitfelder pluralisiert werden sollten.
M. Dudley
2
Hier ist die neueste Version der MSDN-Richtlinien für das Aufzählungsdesign: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley
Ein Buch, für das ich sehr dankbar bin, sind die Framework Design Guidelines . Grundsätzlich wurde es von mehr als 15 Autoren geschrieben, die alle im Laufe der Jahre eine große Rolle bei der Entwicklung von .NET Framework gespielt haben. Das Buch gibt Ihnen einen Einblick in ihren Denkprozess bei der Entwicklung der Framework-APIs und macht Sie auf diese Weise hellsichtig, wenn es um die Navigation in Microsoft Frameworks, Toolkits usw. geht. Viele, wenn nicht der gesamte Text befindet sich in ihren docs website, aber das verpackt es sehr schön.
Lopsided
30

Eine Empfehlung stammt aus den .NET Framework-Entwurfsrichtlinien , Seite 59-60:

Sie einen einzigartigen Typnamen für eine Aufzählung verwenden, es sei denn , ihre Werte Bit - Felder sind.

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

Sie eine Vielzahl von Typenname für eine Aufzählung mit Bitfelder als Werte verwenden, auch Fahnen Enum genannt.

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

In .NET Framework, die meisten „normalen“ Aufzählungen (zB DayOfWeek) haben singuläre Namen und Flagge Aufzählungen (zB StringSplitOptions, BindingFlags) haben mehrere Namen. Dies ist sinnvoll, da ein Wert einer Flaggenaufzählung mehrere Elemente darstellen kann, bei einer Nichtflaggenaufzählung jedoch nur ein einzelnes Element.

Mehrdad Afshari
quelle
5

Im Allgemeinen betrachte ich eine Aufzählungsdefinition als Typdefinition, wobei die Werte der Aufzählung die verschiedenen Werte sind, die der Typ haben kann. deshalb bekommt es einen singulären Namen: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Ja. Wenn Sie die mentale Erfahrung machen, die Aufzählungen als Klassen zu implementieren, sollte die Tatsache, dass Sie einen singulären Namen für den Typ verwenden würden, zeigen, dass es sinnvoll ist, singuläre Namen für solche Aufzählungen zu verwenden. Z.B,

struct Weekday {};

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

...

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

Für wen, der Pluralformen in Aufzählungen bevorzugt, würden Sie das nennen struct Weekdays?

Pedro Alves
quelle
2

Im Allgemeinen betrachte ich eine Aufzählungsdefinition als Typdefinition, wobei die Werte der Aufzählung die verschiedenen Werte sind, die der Typ haben kann. deshalb bekommt es einen singulären Namen:

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

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

Microsoft empfiehlt die Verwendung eines singulären Namens für Aufzählungen, sofern das FlagsAttribut nicht verwendet wird. Und wie aus dem Framework Design Guidelines-Buch entnommen, sollten Sie Aufzählungstypnamen nicht mit Enum, Flags usw. versehen und Aufzählungswerten keine Abkürzung oder Akronym voranstellen, wie dies früher bei VB-Aufzählungen üblich war.

Brian Gideon
quelle
Aber gibt es tatsächlich einen Grund dafür? Wir stellen Schnittstellen mit 'I' voran. Warum nicht Enums mit 'E' und Flags mit 'F' voranstellen? Das würde es kristallklar machen. Beachten Sie, dass ich keine anderen Präfixe mag, aber dies sind Sonderfälle wie die Schnittstelle, bei denen sich der Typ nie ändert.
0

Es ist subjektiv und spielt keine Rolle, was Sie verwenden, solange Sie konsistent sind (ich persönlich verwende Singular als Übertragung meiner SQL-Konventionen).

Jaimal Chohan
quelle
9
Es ist wichtig. Konventionen fördern die Lesbarkeit und Wartbarkeit. Persönliche Konsistenz ist nicht mit herkömmlicher Konsistenz zu vergleichen.
Granate
1
Es ist schwer konsistent zu sein, wenn jede Bibliothek ihre eigene "subjektive" Meinung hat.
Paul Biggar
1
Ich denke, wie Microsoft sagt, verwenden Sie Singular, sollten wir ALLE Singular verwenden. Nee. Solange Sie mit Ihrer Plualisierung und Singularisierung (?) Übereinstimmen, spielt es wirklich keine Rolle.
Jaimal Chohan