2012-10-10 16 views
10

申し訳ありませんが、タイトルがあいまいであれば、どうやって言いたいのか分かりませんでした。肯定的な結果と否定的な結果の条件をテストする必要がありますか?

あなたが望んでいない結果がifステートメントに入ってから関数を終了するように条件をフレーズする方が良いですか、あるいは私が望む結果をテストし、自分のコードでステートメントに従うべきですか?

たぶん、いくつかの例には役立つだろう:

私が否定的な結果のためにテストすることによって何を意味:

私は肯定的な結果のためにテストすることによって何を意味
if(myObject == null) { 
    return; 
} 

//do whatever with myObject 

if(myObject != null) { 
    //do whatever with myObject 
} 

申し訳ありませんが、誰かがあれば私よりも言葉を良くしてください。

+0

elseがない場合、両方のステートメントは異なるものを意味します。 elseがあった場合、コンパイラは最も速い比較を最適化するのに十分であると期待します。 – Eduardo

+0

これは本当に良い質問であり、そこには明確な答えがあるはずです。私は個人的には、正の条件は読みやすく、理解するのがより速いと感じますが、私はこのようなことを確実に証明するための研究があると期待していました。 – Ken

答えて

7

私は、オブジェクトがnullであるかどうかをチェックしてすぐに戻る最初の方法を個人的に好みます。これは、 "実コード"がインデントされずに線形にとどまることを可能にし、多くのネストされたif文を防ぐことができます。 それ以外の場合は、両方の方法が有効で、同じ結果が得られます。あなたの状況に最も適したものを選んでください(他のif文やif文に依存する可能性があります)。ここで

は良い例です:

に反対
if (object1 == null) { 
    return; 
} 
// do some stuff 
if (object2 == null) { 
    return; 
} 
// do some stuff 
if (object3 == null) { 
    return; 
} 

if (object1 != null) { 
    // do some stuff 
    if (object2 != null) { 
     // do some stuff 
     if (object3 != null) { 
      // do some stuff 
     } 
    } 
} 

私はずっと読みやすくするために最初のものを見つけます。

+0

コンパイル速度よりもreadbleは重要ですか? 質問していますか?これらについても新しいことがあります –

+1

この場合、スピードの改善は無視できます。私の意見では、可読性はより重要です。また、コードを最初に記述し、テストし、後で最適化します。既に十分速いものを最適化するポイントはありません。あなたのコードは読みにくくなります。 – monoxygen

0

結果セットが空であることを記録する、または変数が割り当てられていないなどの、正の条件を満たすために実行できる有効なアクションがある場合、正の条件を使用する方が良いです。文字列をテストするときにApache Commons StringUtils isNotBlank()などのAPIがここで役立ちます。しかし、最もきれいなことは、たとえば、変数がnullでない場合に処理を進めるなど、否定的なテストを行うことです。

関連する問題