2010-11-23 8 views
0

提出前のレビューで、私はこの質問が信じられないほどばかげているかもしれないことに気付きました。条件付きチェックと変数なしの戻り、メソッドを2回呼び出す:可能ですか?

if (this.gameOver(gpos) > 0) { 
    //do stuff 
    return this.gameOver(gpos); 
} 

は、私が最初の例では、最初に二回または一度だけthis.gameOver(gpos);を呼ぶだろうかどうかの疑問にあった

if (this.gameOver()) { 
    //do stuff 
    return this.gameOver(gpos); 
} 

を比較します。明らかに、それは2回呼び出されます(正しい?)が、条件をチェックして同時にreturnステートメントに入る方法(中間変数なし)はありますか?

答えて

0

ここではobserver patternがうまくいくと思います。

基本的には、観察可能なGameクラスのオブザーバであるオブザーバConsoleクラス(xboxコンソールと思う)のようなものがあります。ゲームが終了すると、それは殴られ、Gameが完了したことをConsoleを通知するイベントを発生可能性があり、一時停止、などなどGWT、RCPなど

多くのGUIフレームワークでは、間のイベントを公開するために、オブザーバを利用することができますウィンドウ/ビュー。

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)を持っているだろう、とあなたが述べたように、店ローカル変数に追加します。

1

最初の実装ではthis.gameOver(gpos)が2回呼び出されます。私は条件付きでその値を一時的に保存せずに返すきれいな方法を知らない。ここに一時変数を使用できない理由はありますか?コードを読みにくくする(そしておそらく遅くする)ためのいくつかのハックアップの解決策があります。

+1

一時変数を使用できない理由はまったくありません。興味があります – sova

関連する問題