在提交前审核时,我意识到这个问题可能非常愚蠢。
if (this.gameOver(gpos) > 0) {
//do stuff
return this.gameOver(gpos);
}
比较
if (this.gameOver()) {
//do stuff
return this.gameOver(gpos);
}
我怀疑第一个例子是否会在开始时调用this.gameOver(gpos);
两次或只调用一次。显然,它确实调用了两次(对吗?),但有没有办法(没有中间变量)让它检查条件并同时在return语句中?
答案 0 :(得分:1)
第一个实现将两次调用this.gameOver(gpos)
。我不知道有条件地返回该值而不是临时存储的干净方法。有什么理由不能在这里使用临时变量吗?有一些hackish解决方案使代码可读性降低(并且可能更慢)。
答案 1 :(得分:0)
虽然我认为这是糟糕的设计,但我相信它可以满足您的需求:
boolean gameOver(GamePosition gp) {
// example
if (this.gameOver)
return true;
else
throw new Exception();
}
void someMethod() {
try {
return gameOver(gp);
} catch (Exception e) {
// other logic for when the game is not over
}
}
现在,更好的设计是只有一个方法isGameOver(gp)
,如你所提到的,将其存储到局部变量。
答案 2 :(得分:0)
我相信observer pattern在这里会很好用。
基本上,你会有像观察者Console
类(想想xbox控制台等)这样的东西,它是任何可观察的Game
类的观察者。游戏完成后,它可以触发事件以通知Console
Game
已完成,殴打,暂停等。
许多GUI框架(如GWT,RCP等)都可以利用观察者在窗口/视图之间发布事件。