Số ít hay số nhiều cho phép liệt kê?


92

Bạn sử dụng số ít hay số nhiều để liệt kê? Tôi nghĩ nó hợp lý nhất với số nhiều trong khai báo

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

... nhưng tôi nghĩ nó có ý nghĩa hơn với số ít khi sử dụng loại, ví dụ:

Weekday firstDayOfWeek = Weekday.Monday;

Tôi đã đọc ở đâu đó một khuyến nghị sử dụng số ít trong khi enums thông thường và số nhiều với cờ, nhưng tôi muốn nghe thêm một số ưu và nhược điểm.


Nên là bảng kê, không phải là bảng kê.
Reed Copsey

Câu trả lời:


92

Đây là trực tiếp từ Microsoft:

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

Sử dụng tên số ít cho hầu hết các loại Enum, nhưng sử dụng tên số nhiều cho các loại Enum là trường bit.


1
Với lưu ý rằng các trường bit nên được đa dạng hóa.
M. Dudley

2
Đây là phiên bản mới nhất của Hướng dẫn MSDN cho Enumeration Thiết kế: msdn.microsoft.com/en-us/library/ms229058.aspx
Rodney S. Foley

Một cuốn sách mà tôi rất biết ơn mà tôi đã đọc là Hướng dẫn thiết kế khung . Về cơ bản, nó được viết bởi hơn 15 tác giả, tất cả đều đóng vai trò lớn trong sự phát triển của .NET framework trong những năm qua. Cuốn sách cung cấp cho bạn cái nhìn sâu sắc về quy trình suy nghĩ của họ khi họ phát triển các API khung và làm như vậy giúp bạn hiểu thấu đáo khi điều hướng bất kỳ khung công cụ, bộ công cụ nào của Microsoft, v.v. Nhiều nếu không phải tất cả văn bản có thể được tìm thấy trong trang web tài liệu, nhưng nó đóng gói nó rất độc đáo.
Lopsided

30

Một khuyến nghị đến từ Nguyên tắc thiết kế .NET Framework , trang 59-60:

Đừng sử dụng một loại tên số ít cho một đếm, trừ khi giá trị của nó là các trường bit.

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

Đừng sử dụng một loại tên số nhiều cho một điều tra với các lĩnh vực như chút giá trị, còn gọi là cờ enum.

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

13

Trong .NET Framework, hầu hết enums "bình thường" (ví dụ DayOfWeek) có tên số ít và enums cờ (ví dụ StringSplitOptions, BindingFlags) có tên số nhiều. Nó có ý nghĩa, vì giá trị của một enum cờ có thể đại diện cho nhiều mục nhưng đối với một enum không gắn cờ, nó chỉ có thể đại diện cho một mục duy nhất.


5

Nói chung, tôi coi một định nghĩa enum là một định nghĩa kiểu, với các giá trị của enum là các giá trị khác nhau mà kiểu có thể có; do đó nó có một tên số ít: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Đúng. Nếu bạn có kinh nghiệm tinh thần về việc triển khai các enum dưới dạng các lớp, thì việc bạn sử dụng một tên số ít cho loại sẽ tiết lộ rằng việc sử dụng các tên số ít cho các enum như vậy sẽ rất hợp lý. Ví dụ,

struct Weekday {};

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

...

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

Đối với những người thích số nhiều trong enums, bạn có đặt tên như struct Weekdaysvậy không?


2

Nói chung, tôi coi một định nghĩa enum là một định nghĩa kiểu, với các giá trị của enum là các giá trị khác nhau mà kiểu có thể có; do đó nó có một tên số ít:

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

enum CoffeeSize { SMALL, MEDIUM, LARGE };

2

Microsoft khuyến nghị sử dụng một tên riêng cho các bảng liệt kê trừ khi nó sử dụng Flagsthuộc tính. Và như được lấy từ sách Hướng dẫn Thiết kế Khung, bạn không nên đặt hậu tố tên kiểu liệt kê bằng Enum, Flags, v.v. và bạn không nên đặt tiền tố cho các giá trị kiểu liệt kê bằng một chữ viết tắt hoặc từ viết tắt như thường thấy với kiểu liệt kê VB ngày trước.


Nhưng thực sự có một lý do tại sao? Chúng tôi đặt tiền tố giao diện bằng 'I'. Tại sao không đặt tiền tố enums với 'E' và cờ với 'F'. Điều đó sẽ làm cho nó rõ ràng. Lưu ý rằng tôi không thích đặt tiền tố bất kỳ thứ gì khác, nhưng đây là những trường hợp đặc biệt như giao diện mà kiểu sẽ không bao giờ thay đổi.

0

Đó là chủ quan và không quan trọng bạn sử dụng gì, miễn là bạn nhất quán (cá nhân tôi sử dụng số ít như một sự chuyển đổi từ các quy ước Sql của tôi)


11
Nó không thành vấn đề. Các quy ước thúc đẩy khả năng đọc và khả năng bảo trì. Tính nhất quán cá nhân không so với tính nhất quán thông thường.
lựu đạn

1
Khó có thể thống nhất nếu mỗi thư viện có ý kiến ​​“chủ quan” riêng.
Paul Biggar

1
Tôi đoán như Microsoft nói sử dụng số ít, tất cả chúng ta nên sử dụng số ít. Không. Miễn là bạn nhất quán với sự đa dạng hóa và kỳ dị hóa của mình (?), Điều đó thực sự không quan trọng.
Jaimal Chohan

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.