2011-08-03 5 views
0

これは簡単な質問ですが、ここで正しい練習をすることを希望します。 CPUの能力が非常に強力であるため、何千もの反復を伴うループ・コンストラクトなしで呼び出されない限り、これは認識できないほどの違いがないため、この点についてはパフォーマンスの問題については検討していません。私はちょうど受け入れられている基準が何であるかについて意見を求めたい。ブールメソッドから復帰するために受け入れられている練習は何ですか

私は、基本的にチェックを行うだけの方法でブール値を返します。しかし、これを実装する方法は数多くあります。

これは私が通常これを実装する方法です。

public bool CanUndo() 
    { 
     if (_nCurrentUndoIndex > 0) 
      return true; 
     else 
      return false; 
    } 

ただし、メソッドの途中から戻ることはよくありません。私が通常これを行う唯一の時間は、このようなフォーム提出をチェックするときです。

 if (String.IsNullOrEmpty(firstName.Text)) 
     { 
      MessageBox.Show("Please enter a first name", "Incomplete"); 
      return; 
     } 

私はそれが受け入れられると考えます。

「元に戻す」の質問に戻ると、これをコード化する別の方法があります。

public bool CanUndo() 
    { 
     bool returnVal; 
     if (_nCurrentUndoIndex > 0) 
      returnVal = true; 
     else 
      returnVal = false; 
     return returnVal; 
    } 

これは変数を不必要に割り当て、より冗長なコードです。別のオプションがあります。

public bool CanUndo() 
    { 
     bool returnVal = false; 
     if (_nCurrentUndoIndex > 0) 
      returnVal = true; 
     return returnVal; 
    } 

これは、elseを取り除くにつれ、より合理的です。ただし、値がtrueの場合はfalseに初期化することで不必要な割り当てを行います。

+0

にそれを比較するときの理由は明らかになってください。

は展開orを検討してください。コンパイラはおそらくほとんどの違いを最適化してしまいます。たとえそうでなくても、数百万ではなく100万のループを話さない限り、その違いに気づくことはありません。 – hatchet

答えて

2
public bool CanUndo() { 
    return _nCurrentUndoIndex > 0; 
} 

個人的に私はメソッドの途中から戻ることに問題はありません。それはRAIIと引数が消えることをcomplicates cleanup code for C functionsしかし。

私は、すぐに適しているように終了することを好むそうでない場合、あなたはネスティング、幅広いライン(横画面スペースが高価であり、垂直方向のスペースを避けるため、この方法ではある

if (x) { 
    if (y) { 
     if (z) { 
      complete 
     } 
    } 
} 

ではなく

if (!x) 
    return 

if (!y) 
    return 

if (!z) 
    return 

complete 

を取得安い)、あなたがまだ機能しているなら、あなたはエラーの経路にいないことを常に知っています。このデザインでうまく動作するコードも非常に重要な例外を使用するとうまくいきます。

+0

はい、代わりに、基本的にインライン関数として実装したものを忘れてしまいました。ヘッダファイルに実装されていましたが、私のC++の日に戻ってきました。 – WPFNewbie

+0

おそらく私はあまりにも単純なシナリオを選んだでしょう。条件がより複雑であれば単純に>比較し、1行で実装することはできず、3つのオプションのどれを選択するかを読みやすさを維持することはできません。 – WPFNewbie

+0

クリーンアップコードを追加する必要はありませんが、複数返却ルートを使用します。余分なブランチのクリーンアップコードを複製する必要がある場合、それは味の問題になります。小さな関数の場合は、大きなものの場合は小さなものにリファクタリングすることは重要ではありません。 – spraff

0
public bool CanUndo() 
{ 
    return (_nCurrentUndoIndex > 0); 
} 
1

あなたは常に、これは開発者のための読みする方がはるかに簡単ですので、あなたのために書くために高速であり、それはとにかく、コンパイラによって契約を取得、その論理aquivalentにブールリターンを契約する必要があります。

if (a == 1) 
    return true; 
else if (a == 2) 
    return true; 
else if (a == 3) 
    return true; 
else 
    return false; 

とあなたはあまり重要ではないん詳細について心配している契約バージョン

return (a == 1) || (a == 2) || (a == 3) 
関連する問題