小さなステップごとにブール変数を作成します。
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
は何なのかわかりませんが、構造に関しては、私には良さそうです。