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