2011-02-10 17 views
7

Vì vậy, tôi có một "trạng thái" biến trong một lớp. Tôi muốn khai báo nó như một số nguyên để tôi có thể lưu một số câu lệnh if.Có thực hành tốt để sử dụng enum như int không?

int state; 

Một cách để làm điều này là để tuyên bố một nhà nước enum {Một = 0, Hai = 1, Ba = 3}, và sau đó trong câu lệnh switch, nó sẽ trở thành:

switch (state) 
{ 
case One: 
    dosomething(); 
    break; 
case Two: 
    dosomething(); 
    break; 
case Three: 
    dosomething(); 
    break; 
} 

Vì vậy, nó là một thực hành tốt để sử dụng enum như thế này? Có cách nào tốt hơn để thực hiện việc này không?

Cảm ơn!

+18

Khai báo một liệt kê với các bảng liệt kê có tên là 'Một',' Hai' và 'Ba' tương ứng với các giá trị' 0', '1' và' 2' là một ý tưởng rất tồi. –

+4

Giá trị tương ứng thực sự là 0, 1 và 3.:) – Marlon

+1

Đó là một ví dụ. – Snowfish

Trả lời

12

Có đó là cách hay để thực hiện. Bạn thường sử dụng enums để làm cho cuộc sống dễ dàng hơn, rất nhiều con số khác nhau mà không thực sự nói với các lập trình viên khác bất cứ điều gì không phải là khá hữu ích.

Vì vậy, đây là một cách hoàn toàn tốt để sử dụng nó, nó làm cho mã của bạn dễ đọc và dễ hiểu.

Giống như @James McNellis đã chỉ ra, đặt tên cho các thư mục của bạn như "1,2,3,4" là một ý tưởng tồi, vì nó không thể hiện những gì nó thực sự làm.

Nhưng tôi nghi ngờ đó chỉ là một ví dụ từ phía bạn.

Xem xét việc này thay vì:

switch (operationState) 
{ 
    case Waiting: 
     dosomething(); 
     break; 
    case Running: 
     dosomething(); 
     break; 
    case Ended: 
     dosomething(); 
     break; 
} 

Trong trường hợp này, các "hoạt động" là một trong hai: Chờ đợi, Running hoặc kết thúc, mà làm cho nó dễ đọc và dễ hiểu. Bây giờ hãy xem xét cách không có enums:

switch (iState) 
{ 
    case 997: 
     dosomething(); 
     break; 
    case 998: 
     dosomething(); 
     break; 
    case 999: 
     dosomething(); 
     break; 
} 

997 cho bạn biết điều gì? Tuyệt đối Không có gì! Sử dụng mã dễ đọc và dễ hiểu để làm cho cuộc sống của mọi người dễ dàng hơn.

+0

Độc đáo giải thích tại sao enums rất hữu ích. Họ thực sự đi vào riêng của họ khi phát triển mã và bạn có mã gợi ý, gõ 'myEnum ::' và sau đó có một danh sách tất cả các giá trị bạn có thể sử dụng là tuyệt vời. Bạn nên nhớ rằng bạn có thể thay đổi giá trị thực tế của enum, và mã "không nên" phá vỡ ... nhưng một số người có thể đã làm những thứ kỳ lạ, như đọc giá trị của enum, và dựa vào trên đó là giá trị đó. Nhưng tôi sẽ nói đó là mã nghèo nàn của họ, không phải của bạn. – thecoshman

0

Sử dụng tên tiểu bang có thể đọc được trong câu lệnh chuyển thay vì số, có vẻ tốt với tôi. Và tôi không nghĩ rằng nó sẽ ảnh hưởng đến hiệu suất là tốt.

Vì vậy, không có lý do gì để không sử dụng enums!

7

Tất cả mã bạn có ở trên cũng hoạt động tốt nếu bạn có state được khai báo là State thay vì int. Bạn có thể sử dụng nó trong một tuyên bố chuyển đổi, gán cho nó giá trị mới, so sánh với nó, vv Thực sự không có bất kỳ lợi ích nào khi sử dụng một số int ở đây, vì đó là cơ bản "nằm trong mã nguồn". Biến của bạn không phải là số nguyên. Nó không có ý nghĩa để nhân hoặc chia nó bằng một giá trị, hoặc bit chuyển nó sang trái hoặc phải. Đánh dấu biến là State làm cho nó rõ ràng hơn rằng bạn thực sự đang nắm giữ một trong nhiều giá trị và ngăn bạn tạo ra một số sai lầm ở trên. Thêm vào đó, nó cung cấp cho trình biên dịch một cơ hội tốt hơn để chẩn đoán những thứ như thế này:

state = 137; // Error! Can't do this assignment without a cast. 

Nói chung, hãy sử dụng hệ thống kiểu để lợi thế của bạn. Nếu đó là int, hãy làm cho nó là int. Nếu đó là một loại được liệt kê, hãy làm cho nó trở thành một loại được liệt kê.

Các vấn đề liên quan