我正在实施一些碰撞检测。随着时间的推移,随着项目复杂性的增加,我不断添加额外的检查,我无意中发现了一个如下所示的模式:
for (GameObject o1 : collisionObjects) {
for (GameObject o2 : collisionObjects) {
if(o1 == o2){
continue;
}
if(!(o1.isSolid() && o2.isSolid())){
continue;
}
//several more checks
//all of the early-out conditions are passed so do
//do some intersection checks here
}
}
稍后查看整个积累的代码,我想如果我要重构它,我会使用嵌套的 ifs:
for (GameObject o1 : collisionObjects) {
for (GameObject o2 : collisionObjects) {
if(o1 != o2){
if(o1.isSolid() && o2.isSolid()){
//all conditions are met so do collision detection
}
}
}
}
从可读性的角度来看,我非常喜欢第一个示例,因为它清楚地打破了所有条件,并且没有给我留下大量嵌套的 ifs。从效率的角度来看,第一个每次都需要更多的比较。
这些方法哪个更好?通过使用第一个而不是第二个,我是否会无意中调用任何副作用?