สร้างตัวแปรบูลีนสำหรับแต่ละขั้นตอนเล็ก ๆ :
bool step1 = i + u == b || q >= a;
bool step2 = a != b && p.isGood() && group1;
bool step3 = group2 || k.isSomething() || m > n;
if (step3) { doSomething(); }
หลักสูตรนี้คล้ายกับคำตอบของ Lacrymology ยกเว้นมีชื่อแตกต่างกันในแต่ละขั้นตอน
หากคุณตั้งชื่อstep1
, step2
และstep3
ในรูปแบบที่ให้ความรู้สึกความคิดที่ดีนี้ควรจะเป็นโดยไกลที่ชัดเจนมากที่สุด p.isGood()
และk.isSomething()
บางครั้งอาจถูกเรียกใช้ในสถานการณ์ที่มันไม่ได้อยู่ในรหัสดั้งเดิมของคุณดังนั้นนี่จะไม่เป็นตัวเลือกหากฟังก์ชั่นเหล่านั้นมีราคาแพงหรือหากคุณกำลังเรียกใช้รหัสนี้ในวงที่แน่นมาก
ในอีกทางหนึ่งคุณไม่จำเป็นต้องกังวลเกี่ยวกับประสิทธิภาพที่สร้างตัวแปรใหม่ที่อาจเกิดขึ้น คอมไพเลอร์ที่ดีจะปรับมันให้เหมาะสม
ตัวอย่างที่มีการตรวจจับการชนกันของรูปสี่เหลี่ยมผืนผ้า (ซึ่งคุณอาจไม่ได้ใช้เนื่องจากการทำงานที่มีประสิทธิภาพดังกล่าว):
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(); }
อาจกลายเป็น:
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(); }
นอกจากนี้หากคุณต้องการปล่อยให้รหัสของคุณเป็นเช่นนั้นฉันคิดว่ามันก็ดีเหมือนกัน ฉันคิดว่ารหัสของคุณค่อนข้างชัดเจน เห็นได้ชัดว่าฉันไม่ทราบว่าสิ่งที่แน่นอนa b x y i u p k m n
แต่เท่าที่โครงสร้างไปมันดูดีสำหรับฉัน