2011-12-19 4 views
0

ユーザが書かれた日付が有効であることを確認する必要があるので、もっと速くなることを知りたいですか?どちらが速いか[if(x or y)]または[yがxの場合else]

if(dayOfManth > 12 || dayOfManth < 1) { return false; } 
return true; 

または

if(MonthOfYear > 12) { return false; } 
if(MonthOfYear < 1) { return false; } 

return true; 

同じことがDAYOFMONTH(1-31)と他人のために行われている(年間の範囲、短い月、2月のうるう日、電気ショック療法。)

速く何だろう?

+11

[あなたが最適化するために、他のものを持っていない?](http://programmers.stackexchange.com/questions/80084/is-premature-optimization-really-the-root-of-all-evil)あなたが」本当に*気になって、http://jsperf.comでテストケースを作成し、参照してください。 – Matt

+4

'return dayOfMonth> = 1 && dayOfMonth <= 12;'とはどういう意味ですか? –

+0

最初の書き込みと読み込みが高速です。 JavaScriptのインタプリタがあなたのコードでパフォーマンスのボトルネックとなっていることを証明するまで、JavaScriptのインタプリタがどれほど速く汗を流しているかはわかりません(このケースでは決して6パックとは言えません)。さらに、私はさらに進んで、フレデリック・ハミディの答えを使用します。式の結果はブール値であり、ブール値を返すので、式の結果を返します。 –

答えて

5

は単純に使用します。

return dayOfMonth >= 1 && dayOfMonth <= 12 

それは最も読みやすいです。この場合、パフォーマンスは馬鹿馬鹿しく無視できます。マイクロ最適化しないでください。

+2

+1に自分でそれをテスト? – Alnitak

+0

は、あなたが20個のチェックのためにそれを行うだろう...ブール式に基づいて、ブール定数を返さないためhttp://jsperf.com/ –

+2

評価する式が20個ある場合、パフォーマンスよりも可読性が懸念されます。 –

0

あなたの意図をよりよく表すオプションを常に選択してください。この場合、私は主観的ですが、最初のものは2番目のものよりはるかに明確です。

それ以外は、フォームの検証フレームワークを使用して、ホイールを再開発する必要はありません。

EDIT

はそれを試していないが、有望に見えることがない: http://docs.jquery.com/Plugins/Validation

+0

とはどのような検証フレームワークですか? –

2

あなたの質問にコメントがすでにパフォーマンスがここに懸念すべきではない、言うように。だから、読みやすさは王様でなければなりません。あなたの質問にあなたのコメントから

その後、私はあなたがあなたのブール式を分割するために、次のようにオプションを使用することをお勧め

読めませんので、多くのチェックがあります

function someFunction(dayOfMonth, someOtherValue) { 
    var result = true; 
    result &= dayOfMonth >= 1; 
    result &= dayOfMonth <= 12; 
    result &= someOtherValue == 6; 
    return result; 
} 

alert(someFunction(7, 6) ? "true" : "false"); // true 
alert(someFunction(13, 6) ? "true" : "false"); // false 
alert(someFunction(7, 5) ? "true" : "false"); // false 

これはブール値&=演算子を使用して "結果がまだ真であり、この式も真である場合、t hen結果をtrueに設定します。それ以外の場合は「falseに設定。

さておきパフォーマンス、これはあなたがすべての式を分割しましょう、それでも彼らが読めるよう聞かせて、あなたが自分でできる限り多くの繰り返しを避けるようになる。

可読性のために私はなり

+0

2つの読み取り可能なオプションがあります。1)コード内にスペースがあります。 2) '||'を使用します。 –

+0

あなたはそれが何を意味しているのか分かりませんが、私が与えたコードサンプルがそれらによって改善されることを意味するなら、私は同意します。 'dayOfMonth'式を組み合わせました。返り値の前に、または初期の 'var result = true; 'の後に改行を追加することは、可読性を損なうことはありません。答えのポイントは、 '&='演算子を別のオプションとして使うことを提案することでした。複数のreturn文よりも優れています。無関係な式が多い場合は、1つの行にすべての式を詰め込むよりも優れています。 –

+0

あなたが実際に質問のような表現をほとんど持っていない場合、Yuval Adamの答えは完璧です。 –

0

これがユーザー入力の検証であれば、そのようなマイクロ最適化が目立つことはなく、あなたは他の人が示唆しているように、コードの可読性と保守性に努めなければなりません。

あなたの質問に答えてください。私は違いがあるとは思わない。条件式ジャンプを使わずに論理式をコンパイルできれば、不要なものを避けることができます(X86アーキテクチャーでは、他のものでは言えません)。私はあなたが比較を使っているので、これができるとは思わない。あなたはこのような最適化についての詳細を学ぶことに興味があるなら、私は心からあなたがIntel® 64 and IA-32 Architectures Optimization Reference Manual

0

を読むことをお勧めします彼らは両方の全く同じです。これは、短絡評価[Wikipedia]の誤場合のように見えます。

JavaScriptの用途(実際に持っている)のみ短絡評価 - 第一オペランドが最小限必要な条件を返した場合:

論理OR:

true || (true/false) - のみ最初のものがあることが必要です短絡(真のシナリオ)をするのは真実です。

false || true - は今もう一つはなぜなら最初のもの(最悪)から、評価されます。

論理AND:

false && (true/false) - 秒が何であれ、結果はfalseです。 2番目の条件は評価されません(最良のシナリオ)。

true && true - の両方が評価されている(最悪のシナリオ)。

私も少しexampleを作った - 第二の「条件」が評価されるため第二の試験は、()余分なアラートを示しています。

+0

技術的に正しいです。しかし、ABAPでは、このように実際には機能していないことがわかりました。したがって、Javascriptでも違いがあるのだろうか? –

+0

"これほど実際には機能しない"という唯一の例は、関数の副作用である例のようなものです。あなたの例は、何かをより多くするために進歩したものに関するものではありません。 – Bakudan

+0

だから私は8日付を挿入してチェックし、私は20チェックを持ってどのくらいかかりますか? –

関連する問題