각 작은 단계마다 부울 변수를 만듭니다.
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모르지만 구조가 진행되는 한 나에게 좋아 보인다.