2017-04-27 3 views
1

この質問にはより良いタイトルが見つかりませんので、編集の提案は非常に高く評価されます。割り当てられた変数を使用する条件とインライン条件チェック

割り当てられた変数とインライン条件で条件を確認することに違いがあるのでしょうか。例えば

オプション1:

// inline conditions check 
function isSomething(){ 
    return (1 > 2 || 'a' == 'a' || 2 < 4) || 
      (55 == 1 || (32 > 4 || 'a' == 'a') && 6 > 2) || 
      ('abc' != 'bca' && 3 == 3); 
} 

オプション2:

// pre assigned variables condition check 
function isSomething(){ 
    const conditionA = 1 > 2 || 'a' == 'a' || 2 < 4; // some complex condition 
    const conditionB = 55 == 1 || (32 > 4 || 'a' == 'a') && 6 > 2; // some complex condition 
    const conditionC = 'abc' != 'bca' && 3 == 3 // some complex condition 

    const result = conditionA || conditionB || conditionC; 
    return result; 
} 

オプション2に、それはすべての3つの条件をチェックしますが、理論的にオプション1でなければならないようですそれがtrueなら最初のチェックの後に戻ることができます。

明らかに、オプション2は私が選択したものですが、動作やパフォーマンスに違いはありますか? 2つのオプションの間でパフォーマンスをテストする方法はありますか?

+1

を短絡評価の利点を組み合わせたい場合は、まだjsPerfで聞いていない場合は、これが最良の可能性サイトを訪問する瞬間。複数の選択肢があり、すべてブラウザ上でオンラインになっています(例:http://jsben.ch/#/7XyeB)。 –

+0

@WiktorZychla面白い、ありがとう、私はそれについて知らなかった。私は時々別の結果を得るが。例:コードブロック1が最速、次にコードブロック2が最速 –

答えて

-1

パフォーマンスを確認する限り、私はjsperfを見るでしょう。

まだお持ちでない場合はconsole.time()console.profile()performance.now()をご覧ください。

オプション2では、3つの新しいオブジェクトを作成し、それらを変数に割り当て、オブジェクトを作成してメモリに割り当てると、これがパフォーマンスに与える影響は軽微です。

オプション1では、最初の値がtrueの場合、2番目のオプションは評価されません。||は短絡演算子ですが、2番目のオプションでは3つの条件すべてが返されます。

この方法が複数回使用されているため、パフォーマンスが問題になる場合は、パフォーマンステストが実際のアプリケーションを可能な限りシミュレートすることを常に提案します。

+0

*両方のオプションで同じ条件チェックを行っているので*これは間違っています。 OP自身が指摘しているように、最初のケースは短絡し、2番目のケースは短絡しません。 –

+0

@torazaburo最初の条件が真であれば、他の条件は実行されず、2番目の条件は実行されます。私は答えを変えるでしょう。 –

2

あなたは、読みやすさと名付けられた変数での性能試験については、その後

function isSomething(){ 
    const conditionA =() => 1 > 2 || 'a' == 'a' || 2 < 4; 
    const conditionB =() => 55 == 1 || (32 > 4 || 'a' == 'a') && 6 > 2; 
    const conditionC =() => 'abc' != 'bca' && 3 == 3; 

    const result = conditionA() || conditionB() || conditionC(); 

    return result; 
} 
+0

これは私の質問に対する正確な答えとは言えませんが、この解決策は素晴らしいです!それについて考えていない、ちょっと "怠惰な"状態チ​​ェックになります。どうもありがとう。 –

関連する問題