为每个小步骤设置布尔变量:
bool step1 = i + u == b || q >= a;
bool step2 = a != b && p.isGood() && group1;
bool step3 = group2 || k.isSomething() || m > n;
if (step3) { doSomething(); }
当然,这与泪谱学的答案类似,只是每个步骤的名称不同。
如果你的名字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
是什么,但是就结构而言,对我来说看起来不错。