列挙の単数形または複数形?


92

列挙には単数形または複数形を使用しますか?宣言の複数形が最も理にかなっていると思います

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

...しかし、タイプを使用する場合は、単数の方が理にかなっていると思います。

Weekday firstDayOfWeek = Weekday.Monday;

どこかで、通常の列挙型の単数形とフラグ付きの複数形を使用するという推奨事項を読みましたが、もう少し長所と短所を聞きたいと思います。


列挙子ではなく、列挙体である必要があります。
リードコプシー

回答:


92

ここにそれはマイクロソフトから直接です:

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

ほとんどの列挙型には単数形の名前を使用しますが、ビットフィールドである列挙型には複数形の名前を使用します。


1
ビットフィールドは複数形にする必要があることに注意してください。
M.ダドリー

2
列挙型設計に関するMSDNガイドラインの最新バージョンは次のとおりです。msdn.microsoft.com
Rodney S. Foley

私が読んだことにとても感謝している本の1つは、フレームワーク設計ガイドラインです。基本的には、何年にもわたって.NETFrameworkの開発で大きな役割を果たした15人以上の著者によって書かれています。この本は、彼らがフレームワークAPIを開発するときの彼らの思考プロセスへの洞察を提供し、そうすることで、Microsoftフレームワーク、ツールキットなどをナビゲートすることに関して、境界線の透視になります。 docsウェブサイトですが、これは非常にうまくパッケージ化されています。
偏った

30

1つの推奨事項は、.NET Frameworkの設計ガイドライン(59〜60ページ)からのものです。

値がビットフィールドでない限り、列挙型には単一の型名を使用してください

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

ビットフィールドを値として持つ列挙型には複数形の名前を使用してください。これはフラグ列挙型とも呼ばれます。

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

13

.NET Frameworkでは、ほとんどの「通常の」列挙型(eg DayOfWeek)には単数形の名前があり、フラグ列挙型(eg StringSplitOptionsBindingFlags)には複数形の名前があります。フラグ列挙型の値は複数のアイテムを表すことができますが、フラグ以外の列挙型の場合は単一のアイテムしか表すことができないため、これは理にかなっています。


5

一般に、列挙型の定義は型の定義であると考えています。列挙型の値は、型が持つことができるさまざまな値です。したがって、それは単数の名前を取得します。 enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

はい。列挙型をクラスとして実装するという精神的な経験をしている場合、型に単数の名前を使用するという事実は、そのような列挙型に単数の名前を使用することが理にかなっていることを明らかにするはずです。例えば、

struct Weekday {};

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

..。

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

列挙型で複数形を好む人のために、あなたはそれを名付けstruct Weekdaysますか?


2

一般に、列挙型の定義は型の定義であると考えています。列挙型の値は、型が持つことができるさまざまな値です。したがって、それは単数の名前を取得します。

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

2

Microsoftは、属性を使用しない限り、列挙に単一の名前を使用することお勧めFlagsます。また、フレームワーク設計ガイドラインの本から引用したように、列挙型名の前にEnum、Flagsなどを付けたり、当時のVB列挙で一般的だったように、列挙値の前に省略形や頭字語を付けたりしないでください。


しかし、実際には理由がありますか?インターフェイスの前に「I」を付けます。列挙型の前に「E」を付け、フラグの前に「F」を付けてみませんか。それはそれを非常に明確にするでしょう。私は他のものに接頭辞を付けるのが好きではないことに注意してください、しかしこれらはタイプが決して変わらないインターフェースのような特別な場合です。

0

それは主観的であり、一貫している限り、何を使用してもかまいません(個人的には、SQL規則からの引き継ぎとして単数を使用します)


11
それは問題である。規則は、読みやすさと保守性を促進します。個人の一貫性は、従来の一貫性と比較されません。
手榴弾

1
各図書館が独自の「主観的な」意見を持っている場合、一貫性を保つのは困難です。
Paul Biggar

1
Microsoftが単数を使用すると言っているように、私たちはすべて単数を使用する必要があると思います。いいえ。多重化と特異化(?)に一貫している限り、それは実際には問題ではありません。
Jaimal Chohan

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.