Tại sao Cờ liệt kê được coi là một kỹ năng trung gian?


8

Tôi đã đọc bài viết này: Thiết kế cờ Enrsations @ msdn và nó nói

Kết hợp các giá trị liệt kê cờ là một kỹ năng trung gian không cần thiết cho các nhà phát triển thực hiện các tình huống phổ biến.

Tôi nghĩ việc liệt kê cờ là tuyệt vời - điều mà tôi đã học được trong quá trình trải nghiệm với C.

Tại sao có vẻ như bài viết này đang cảnh báo các nhà phát triển tránh xa những gì tôi cho là một kỹ năng hữu ích (và không phức tạp)?

Câu trả lời:


17

Cũng như nhiều khái niệm điện toán, những người hiểu chúng không thấy chúng khó khăn. Bạn nằm trong số những người đó; Xin chúc mừng!

Điều đó không thay đổi thực tế rằng số học bitwise có vẻ lạ và khó hiểu đối với nhiều người, bởi vì nó sử dụng một yếu tố ngôn ngữ (số) mà họ được sử dụng để xử lý theo một cách (cho độ lớn tuyệt đối) theo một cách rất khác (với ý nghĩa khác nhau cho mỗi bit, bất kể 'giá trị' của chúng trong hệ thống số bình thường.)

Vâng, có những người mà điều này rất khó, và vâng, có rất nhiều vị trí có thể được lấp đầy bởi những người không thể bận tâm để học số học bit. Đó là "trung gian" nghĩa là gì ở đây.


5

Bài báo nói

Xem xét việc cung cấp các giá trị liệt kê đặc biệt cho các tổ hợp cờ thường được sử dụng.

Tất nhiên, không khó để kết hợp các cờ khác nhau bằng cách sử dụng "|" toán tử, nhưng cung cấp các giá trị liệt kê đặc biệt có lợi thế sau:

  • dễ đọc hơn:

    MyEnumeration.MyFlag1 | MyEnumeration.MyFlag2 | MyEnumeration.MyFlag3

    có xu hướng dài hơn nhiều

    MyEnumeration.MyCombinedFlags123

  • điều này làm rõ ngay rằng sự kết hợp cụ thể của các cờ là sự kết hợp hợp pháp (có thể hoặc không thể xảy ra đối với mọi kết hợp khác)

Tuy nhiên, tôi đã đọc câu này từ bài viết không giống như "đừng làm điều này, không bao giờ", chỉ như "làm cho nó dễ dàng hơn cho trường hợp thông thường". Không có gì để nói chống lại việc không có giá trị enum đặc biệt cho một sự kết hợp hiếm khi được sử dụng.

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.