gpt4 book ai didi

java - if-continue 与嵌套 if

转载 作者:行者123 更新时间:2023-11-30 07:46:06 24 4
gpt4 key购买 nike

我正在实现一些碰撞检测。随着时间的推移,随着项目复杂性的增加,通过不断添加额外的检查,我无意中发现了如下所示的模式:

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
}
}
}
}

从可读性的角度来看,我非常喜欢第一个示例,因为它清楚地打破了所有条件,并且不会给我留下一组深层的嵌套 if。从效率的角度来看,第一个每次都需要更多的比较。

以下哪种方法更好?我使用第一个而不是第二个是否会无意中引发任何副作用?

最佳答案

如果您担心第一个需要更多检查,为什么不否定您的逻辑并将第二个 if 语句折叠到第一个 if 语句中?例如

if(o1 != o2 && o1.isSolid() && o2.isSolid()) {
// extra stuff
}

通过 boolean 逻辑的惰性分析,一旦达到false,语句就会失败。

如果您担心性能,但我认为研究碰撞检测策略更为重要。例如八叉树、BSP 等。

关于java - if-continue 与嵌套 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com