2016-06-30 6 views
-4

コード1 'が':使用しての最も効率的な

if(!(varOfsomeClass->isValid($imParams))){ 
    //some function i need to run 
} 
  • 実行機能がないと
  • 逆値をIsValidの場合

コード2と

  • チェック値(!) :

    if((varOfsomeClass->isValid($imParams))){ 
    } else { 
        //some function i need to run 
    } 
    
    • run関数は
    • が(多分、またはのisValidが真であるため、何もしない)他の一部を入力した場合と
    • チェック値より効率的である

    をIsValidの?どちらを使うのが良いですか?

    NB:コード1は確かにあなたがisValid trueを返した場合には何もしていないように見えます

  • +2

    実際に理解できるコードを書いてください。ここでは、特にPHPの文脈で、「最も効率的」を心配する*正当な理由はありません。 (注意:いくつかの言語には 'unless'がありますが、これは逆' 'if''ですが、PHPやその他のC-ishの方言は含みません)。 – user2864740

    +0

    https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize – CBroe

    +0

    最初に最も重要なことは、PHP変数が '$'で始まることです。第二に、あなたの質問は何も使用していないということです。質問するだけで質問しないでください。 – Peter

    答えて

    0

    より「人間」です。私は複数の理由のために、あなただけの単一if文を持っている最初のバージョン、に固執することをお勧めします:

    • 少ないコードを、読みやすくするために、「コードとして解釈することができ、空のブロックを残し
    • を理解するために他の貢献

    話す技術的には、「終了していない、(通訳に応じて)多分保存JUMPアセンブリ命令を除いて、両方のコードは限り効率的になります...それならば、これらのマイクロ最適化を考えるしようとしないでくださいコードを読みにくくする。

    +0

    *咳* PHP *咳* – user2864740

    +0

    ええ、通訳のためにコンパイラが変更されました:-) –

    1

    例1のほうが効率的ですが、このタイプのマイクロ最適化ではマイクロ秒で測定可能なパフォーマンスが得られるとは思えません。その価値はありません。

    if()自体はtrue/false値に対して渡された式を評価するので、ほとんどの場合、!を追加するのは冗長です。言い換えれば

    、なぜあなたがする必要があります。これに代えて

    $number = 1; 
    if(!$number){} 
    

    $number = 1; 
    if($number){} 
    

    $numberfalseある場合は、その後、何か他に移動し、迅速出力のものにしようとしている場合を除き、それは最初のものを使用するために、任意の意味がありません。

    0

    興味深い質問です。 私はこのミニテストスイートの中に入れて、それをテストすることをお勧め:コード2タイプと比較したときに

    $startA = microtime(true); 
    for($i = 0; $i < 10000; $i++) 
    { 
        //Code 1 
    } 
    $endA = microtime(true); 
    
    unset ($all, $your, $variables); 
    
    $startB = microtime(true); 
    for($i = 0; $i < 10000; $i++) 
    { 
        //Code 2 
    } 
    $endB = microtime(true); 
    
    echo $endA-$startA."<br />"; 
    echo $endB-$startB."<br />"; 
    
    +0

    '0.00024104118347168 //使用!演算子 ' ' 0.00018596649169922 // else else'を使用しています –

    +0

    複数回実行しましたか?結果は異なる場合があります。多くの実行だけがあなたに "トレンド"を表示します – JRsz

    +0

    はい、複数回実行しました –

    1
    if(!(varOfsomeClass->isValid($imParams))){ 
        //some function i need to run 
    } 
    

    このタイプのコードは、少ないリソースを使用しています。

    0

    これらはどちらも等しく有効です。

    最初に追加する必要があるのは! negateステートメントで、2番目にはelseステートメントが追加されています。 if/else構造体を扱うときは、CコードのPHPの使用が非常に効果的です。 2番目のステートメントは、astパーサーの最初の関数と同様に縮小されます。

    しかし、第2のものは読みにくいので、第1のものを優先します。あなたは(偽/リバース)のみ、uが使用できる値ない状態を返す必要がある場合は、あなたの戻り値を必要とするかに依存している場合は、最良の使用

    0

    1. if (! varOfsomeClass->isValid($imParams)){ 
          //some function you need to run 
      } 
      
    2. あなたは戻り値(真) 権が必要な場合は
    3. 、その後、使用:

      if (varOfsomeClass->isValid($imParams)){ 
          // some function you need to run true 
      } 
      
      あなたは真と偽(両方)戻り値が必要な場合は
    4. 、その後、使用:

      if (varOfsomeClass->isValid($imParams)){ 
      } else { 
          //some function you need to run 
      } 
      

    そして、あなたのノートの

    if (varOfsomeClass->isValid($imParams)){ 
        // some function you need to run true 
    } else { 
        // some function you need to run false 
    } 
    
    は、今までにこれを使用しないでくださいそれはあなたが「人間」ではないと呼んだものです。あなたが軽いのと同じですが、あなたは暗いです。 :)

    関連する問題