Numaralandırma için tekil mi yoksa çoğul mu?


92

Numaralandırma için tekil mi yoksa çoğul mu kullanıyorsunuz? Beyannamede çoğul olmasının en mantıklı olduğunu düşünüyorum

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

... ancak türü kullanırken tekil ile daha mantıklı olduğunu düşünüyorum, örneğin

Weekday firstDayOfWeek = Weekday.Monday;

Bir yerde normal numaralandırmalarla tekil ve bayraklarla çoğul kullanmak için bir öneri okudum, ancak bazı artıları ve eksileri duymak istiyorum.


Numaralandırıcı değil, numaralandırma olmalıdır.
Reed Copsey

Yanıtlar:


92

İşte doğrudan Microsoft'tan:

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

Çoğu Enum türü için tekil bir ad kullanın, ancak bit alanları olan Enum türleri için çoğul bir ad kullanın.


1
Bit alanlarının çoğullaştırılması gerektiğine dikkat edin.
M. Dudley

2
İşte Numaralandırma Tasarımı için MSDN Yönergelerinin en son sürümü: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley

Okuduğum için çok minnettar olduğum kitaplardan biri Çerçeve Tasarım Yönergeleri . Temelde, yıllar boyunca .NET çerçevesinin geliştirilmesinde büyük roller oynayan 15+ yazar tarafından yazılmıştır. Kitap, çerçeve API'lerini geliştirdiklerinde onların düşünce süreçleri hakkında size bir fikir verir ve bunu yaparak, herhangi bir Microsoft çerçevesinde, araç setinde vb. Gezinme söz konusu olduğunda sizi sınırda durmaya hazır hale getirir. docs web sitesi, ancak bu onu çok güzel bir şekilde paketliyor.
Orantısız

30

Bir öneri, .NET Framework Tasarım Yönergeleri , sayfa 59-60'dan gelir:

Do onun değerlerini bit alanları olmadıkça, bir numaralandırma için tekil bir tür adı kullanın.

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

Do değerleri olarak bit alanları ile bir numaralandırma için çoğul bir tür adı kullanmak, aynı zamanda bir bayrak enum denir.

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

13

.NET Framework, çoğu "normal" çeteleler (örn DayOfWeek) tekil isim ve bayrak Çeteleler sahip (örneğin StringSplitOptions, BindingFlags) çoğul isimler var. Bir bayrak numaralandırmasının değeri birden çok öğeyi temsil edebildiğinden, ancak bayraklı olmayan bir enum için yalnızca tek bir öğeyi temsil edebileceğinden mantıklıdır.


5

Genel olarak, bir enum tanımının bir tür tanımı olduğunu düşünüyorum, enum değerleri türün sahip olabileceği farklı değerler; bu nedenle tekil bir isim alır: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Evet. Numaralandırmaları sınıflar olarak uygulamanın zihinsel deneyimini yaparsanız, tür için tekil bir ad kullanmanız, bu tür numaralandırmalar için tekil isimler kullanmanın mantıklı olduğunu ortaya koymalıdır. Örneğin,

struct Weekday {};

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

...

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

Kim çoğulları enums olarak tercih eder, bunu adlandırır struct Weekdaysmısınız?


2

Genel olarak, bir enum tanımının bir tür tanımı olduğunu düşünüyorum, enum değerleri türün sahip olabileceği farklı değerler; bu nedenle tekil bir isim alır:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

2

Microsoft , özniteliği kullanmadığı sürece numaralandırmalar için tekil bir ad kullanılmasını önerirFlags . Ve Çerçeve Tasarım Yönergeleri kitabından alındığı gibi, numaralandırma türü adlarını Enum, Flags, vb. İle sonlandırmamalısınız ve gün içinde VB numaralandırmalarında yaygın olduğu gibi numaralandırma değerlerine bir kısaltma veya kısaltma eklememelisiniz.


Ama gerçekten neden var mı? Arayüzlerin önüne "I" koyarız. Numaralandırmalara neden 'E' ve bayraklar 'F' önekini eklemeyelim. Bu onu çok net hale getirir. Başka hiçbir şeyin önekini eklemeyi sevmediğimi unutmayın, ancak bunlar, türün asla değişmeyeceği arayüz gibi özel durumlar.

0

Bu özneldir ve tutarlı olduğunuz sürece ne kullandığınız önemli değildir (şahsen ben Sql sözleşmelerimden bir taşınma olarak tekil kullanıyorum)


11
Farkeder. Kurallar okunabilirliği ve sürdürülebilirliği artırır. Kişisel tutarlılık, geleneksel tutarlılıkla karşılaştırılmaz.
el bombası

1
Her kütüphanenin kendi "öznel" görüşü varsa tutarlı olmak zordur.
Paul Biggar

1
Sanırım Microsoft tekil kullan dediği gibi, TÜM TÜMÜ tekil kullanmalıyız. Hayır! Çoğullaştırma ve tekilleştirme (?) İle tutarlı olduğunuz sürece, gerçekten önemli değil.
Jaimal Chohan

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.