Tạo các biến boolean cho mỗi bước nhỏ:
bool step1 = i + u == b || q >= a;
bool step2 = a != b && p.isGood() && group1;
bool step3 = group2 || k.isSomething() || m > n;
if (step3) { doSomething(); }
Tất nhiên điều này tương tự như câu trả lời của Lacrymology, ngoại trừ với các tên khác nhau cho mỗi bước.
Nếu bạn đặt tên step1
, step2
và step3
theo những cách có ý nghĩa khái niệm tốt, thì đây sẽ là điều dễ đọc nhất. p.isGood()
và k.isSomething()
đôi khi có thể được gọi trong các tình huống không có trong mã gốc của bạn, vì vậy đây sẽ không phải là một lựa chọn nếu các chức năng đó đắt tiền hoặc nếu bạn đang chạy mã này trong một vòng lặp rất chặt chẽ.
Mặt khác, bạn không cần lo lắng về hiệu suất đạt được mà việc tạo các biến mới có thể phải chịu; một trình biên dịch tốt sẽ tối ưu hóa chúng ra.
Một ví dụ với phát hiện va chạm hình chữ nhật (mà bạn có thể sẽ không sử dụng do lần nhấn hiệu suất nói trên):
if((a.x + a.width >= b.x || b.x + b.width >= a.x)
&& (a.y + a.height >= b.y || b.y + b.width >= a.y)
)
{ collision(); }
Có thể trở thành:
bool horizMatch = a.x + a.width >= b.x || b.x + b.width >= a.x;
bool vertMatch = a.y + a.height >= b.y || b.y + b.width >= a.y;
if(horizMatch && vertMatch) { collision(); }
Ngoài ra, nếu bạn muốn để lại mã của mình, tôi nghĩ điều đó cũng hoàn toàn tốt. Tôi thành thật nghĩ rằng mã của bạn là khá dễ đọc. Rõ ràng là tôi không biết chính xác a b x y i u p k m n
nó là gì , nhưng theo như cấu trúc, nó có vẻ tốt với tôi.