Nó hợp lệ và rất hữu ích trong một số trường hợp.
Hãy xem xét các mã sau đây:
switch(poll(fds, 1, 1000000)){
default:
// here goes the normal case : some events occured
break;
case 0:
// here goes the timeout case
break;
case -1:
// some error occurred, you have to check errno
}
Điểm đáng chú ý là đoạn mã trên dễ đọc và hiệu quả hơn so với xếp tầng if
. Bạn có thể đặt default
ở cuối, nhưng nó là vô nghĩa vì nó sẽ tập trung sự chú ý của bạn vào các trường hợp lỗi thay vì các trường hợp thông thường (đây là default
trường hợp).
Trên thực tế, đó không phải là một ví dụ tốt, trong poll
bạn biết có bao nhiêu sự kiện có thể xảy ra nhiều nhất. Quan điểm thực tế của tôi là có những trường hợp với một tập hợp các giá trị đầu vào được xác định trong đó có 'trường hợp ngoại lệ' và trường hợp bình thường. Nếu tốt hơn là đặt ngoại lệ hoặc trường hợp bình thường ở phía trước là vấn đề lựa chọn.
Trong lĩnh vực phần mềm tôi nghĩ đến một trường hợp rất thông thường khác: thu hồi với một số giá trị đầu cuối. Nếu bạn có thể biểu thị nó bằng cách sử dụng một công tắc, default
sẽ là giá trị thông thường chứa lệnh gọi đệ quy và các phần tử phân biệt (trường hợp riêng) các giá trị đầu cuối. Thường không cần phải tập trung vào các giá trị đầu cuối.
Một lý do khác là thứ tự của các trường hợp có thể thay đổi hành vi mã được biên dịch và điều đó quan trọng đối với các màn trình diễn. Hầu hết các trình biên dịch sẽ tạo mã lắp ráp được biên dịch theo cùng thứ tự như mã xuất hiện trong công tắc. Điều đó làm cho trường hợp đầu tiên rất khác so với các trường hợp khác: tất cả các trường hợp ngoại trừ trường hợp đầu tiên sẽ liên quan đến bước nhảy và điều đó sẽ làm trống các đường ống của bộ xử lý. Bạn có thể hiểu nó giống như dự báo nhánh mặc định để chạy trường hợp xuất hiện đầu tiên trong công tắc. Nếu một trường hợp nếu phổ biến hơn nhiều so với những người khác thì bạn có lý do rất tốt để đặt nó như là trường hợp đầu tiên.
Đọc bình luận đó là lý do cụ thể tại sao người đăng ban đầu hỏi câu hỏi đó sau khi đọc sắp xếp lại Trình biên dịch Intel Loop về tối ưu hóa mã.
Sau đó, nó sẽ trở thành một số trọng tài giữa khả năng đọc mã và hiệu suất mã. Có lẽ tốt hơn để đặt một bình luận để giải thích cho người đọc trong tương lai tại sao một trường hợp xuất hiện đầu tiên.