Bạn có thể đưa ra một số giả định về x, y, z, q không? e.G. chỉ một trong số họ có thể đúng. Hơn bạn có thể xem nó như là một nhà nước
enum State {
X{
void doSomething(){
doItTheXWay();
}
},
Y{
void doSomething(){
doItTheYWay();
}
},
Z{
void doSomething(){
doItTheZWay();
}
},
Q{
void doSomething(){
doItTheQWay();
}
};
void doSomething(){
}
}
và trong mã của bạn, nơi bạn sử dụng câu lệnh if
bạn có thể gán một nhà nước và chỉ cần làm điều đúng
State state = getAState();
state.doSomething();
Trong trường hợp bạn không thích enums Nhà nước có thể là một giao diện và X để Q có thể được thực hiện các lớp học. Những lợi ích trong trường hợp này là trong nhiều cách sử dụng giống nhau nếu người khác xây dựng. Giả sử một số codelines sau đó bạn sẽ bắt đầu với
if(x)
do_the_next_thing_with_X();
...
hoặc bạn chỉ có thể mở rộng enum của bạn với chức năng khác và làm cho một cuộc gọi duy nhất
state.doTheNextThing();
@Thirler Hmm, mà sẽ đánh bại mục đích ngắn mạch đánh giá. Tôi nghĩ rằng trên trung bình giả sử xác suất bằng nhau và thời gian phức tạp của x, y, z, và q này sẽ là một tăng hiệu suất. Nhưng nếu xác suất của z là 50% và mất ít chế biến trong khi xác suất q là 1% và phải mất 95% công suất xử lý? Xem cách tối ưu hóa vi mô có thể khiến bạn gặp rắc rối khi không có chỉ số phù hợp? –
vâng, chúng ta cần phải sử dụng tối đa một biến để kiểm tra – Halo
@Tim Bạn cần các điều kiện cực kỳ dài (hoặc mã được thực hiện hàng triệu lần) để có hiệu suất thoát nước.Tôi chắc chắn không tối ưu hóa (câu hỏi không nói về nó), tôi đề nghị để cải thiện khả năng bảo trì. Nếu hiệu suất là quan trọng, bạn sẽ cần phải đệm kết quả của phép tính một cách minh bạch (ẩn nó đằng sau một hàm lưu trữ kết quả). Lưu ý rằng ví dụ đã cho thi hành một số điều kiện hai lần. Nhưng một quy tắc tốt không phải là để tối ưu hóa ở tất cả cho đến khi bạn thấy rằng phải mất một số lượng đáng kể thời gian để thực thi. – Thirler