Tunggal atau jamak untuk pencacahan?


93

Apakah Anda menggunakan tunggal atau jamak untuk pencacahan? Saya pikir paling masuk akal dengan bentuk jamak dalam deklarasi

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

... tapi menurut saya lebih masuk akal dengan bentuk tunggal saat menggunakan tipe, misalnya

Weekday firstDayOfWeek = Weekday.Monday;

Saya membaca rekomendasi di suatu tempat untuk menggunakan tunggal dengan enum reguler dan jamak dengan bendera, tetapi saya ingin mendengar lebih banyak pro dan kontra.


Seharusnya pencacahan, bukan pencacah.
Reed Copsey

Jawaban:


93

Ini dia langsung dari Microsoft:

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

Gunakan nama tunggal untuk sebagian besar jenis Enum, tetapi gunakan nama jamak untuk jenis Enum yang merupakan bidang bit.


1
Dengan catatan bahwa bidang bit harus berbentuk jamak.
M. Dudley

2
Berikut adalah versi terbaru dari Panduan MSDN untuk Desain Pencacahan: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley

Satu buku yang sangat saya syukuri karena telah saya baca adalah Framework Design Guidelines . Pada dasarnya ini ditulis oleh 15+ penulis yang semuanya memainkan peran besar dalam pengembangan kerangka .NET selama bertahun-tahun. Buku ini memberi Anda wawasan tentang proses berpikir mereka ketika mereka mengembangkan API kerangka kerja, dan dengan melakukan itu membuat Anda menjadi waskita ketika harus menavigasi kerangka kerja Microsoft, toolkit, dll. Banyak jika tidak semua teks dapat ditemukan di mereka docs, tetapi ini memaketkannya dengan sangat baik.
Timpang

30

Salah satu rekomendasi berasal dari .NET Framework Design Guidelines , halaman 59-60:

Jangan menggunakan nama tipe tunggal untuk pencacahan, kecuali nilai-nilainya adalah bidang bit.

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

Jangan menggunakan nama jenis jamak untuk pencacahan dengan sedikit bidang sebagai nilai-nilai, juga disebut enum bendera.

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

13

Dalam .NET Framework, yang paling "normal" enum (misalnya DayOfWeek) memiliki nama tunggal dan enum bendera (misalnya StringSplitOptions, BindingFlags) memiliki nama jamak. Masuk akal, karena nilai enum bendera dapat mewakili beberapa item tetapi untuk enum non-bendera, itu hanya dapat mewakili satu item.


5

Secara umum, saya menganggap definisi enum sebagai definisi tipe, dengan nilai enum menjadi nilai berbeda yang dapat dimiliki tipe; oleh karena itu ia mendapat nama tunggal: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Iya. Jika Anda melakukan pengalaman mental dalam mengimplementasikan enum sebagai kelas, maka fakta bahwa Anda akan menggunakan nama tunggal untuk tipe tersebut akan mengungkapkan bahwa masuk akal untuk menggunakan nama tunggal untuk enum semacam itu. Misalnya,

struct Weekday {};

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

...

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

Untuk siapa yang lebih suka bentuk jamak dalam enum, apakah Anda akan menyebutkannya struct Weekdays?


2

Secara umum, saya menganggap definisi enum sebagai definisi tipe, dengan nilai enum menjadi nilai berbeda yang dapat dimiliki tipe; oleh karena itu ia mendapat nama tunggal:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

2

Microsoft menganjurkan menggunakan nama tunggal untuk pencacahan kecuali jika menggunakan Flagsatribut. Dan seperti yang diambil dari buku Panduan Desain Kerangka, Anda tidak boleh memberikan akhiran nama jenis pencacahan dengan Enum, Bendera, dll. Dan Anda tidak boleh mengawali nilai pencacahan dengan singkatan atau akronim seperti yang umum dengan pencacahan VB di masa lalu.


Tapi apakah sebenarnya ada alasannya mengapa? Kami memberi awalan antarmuka dengan 'I'. Mengapa tidak mengawali enum dengan 'E' dan menandainya dengan 'F'. Itu akan membuatnya sangat jelas. Perhatikan bahwa saya tidak suka mengawali apa pun, tetapi ini adalah kasus khusus seperti antarmuka di mana jenisnya tidak akan pernah berubah.

0

Ini subjektif dan tidak masalah apa yang Anda gunakan, selama Anda konsisten (secara pribadi saya menggunakan tunggal sebagai bawaan dari konvensi Sql saya)


11
Bermasalah. Konvensi mempromosikan keterbacaan dan pemeliharaan. Konsistensi pribadi tidak sebanding dengan konsistensi konvensional.
granat

1
Sulit untuk konsisten jika setiap perpustakaan memiliki pendapat "subyektif" sendiri-sendiri.
Paul Biggar

1
Saya kira seperti yang dikatakan Microsoft gunakan tunggal, kita SEMUA harus menggunakan tunggal. Nggak. Selama Anda konsisten dengan plualisasi dan singularisasi (?), Itu tidak masalah.
Jaimal Chohan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.