衝突検出を実装しています。時間が経つにつれて、プロジェクトの複雑さが増すにつれて追加のチェックを継続的に追加することで、次のようなパターンに偶然遭遇しました。
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 の深いセットを残さないためです。効率の観点から、最初の方法では毎回より多くの比較が必要になります。
これらの方法のうち、どちらが優れていますか? 2 番目ではなく 1 番目を使用することで、無意識のうちに呼び出している副作用はありますか?