2010-11-23 12 views
0

否定(!= false)の評価が== trueよりも速いと私は思いました!= false vs. == true

これは間違いありませんか?

+6

わかりませんが、決して書き込みません!= falseまたは== trueとにかく、(〜x)かif(x) - あなたの選択した言語に翻訳してください。 –

+3

これは完全に言語(および実装)固有のものだと思います。 – Cameron

+1

@ハイパフォーマンスマーク:最近のトレンドは、逆の方向に向いていると思います。読みやすさが問題で、パフォーマンスがないからです。 – Eiko

答えて

14

これは間違っています。現代のコンパイラとインタプリタはすべて最適化します。

私にとって(少なくとも私にとって)重要なのは、== trueがMEの解釈がはるかに速いことです。

早すぎる最適化はすべての悪の根源です。

編集:はい、私はif(true)を使用します。しかしそれは問題ではありませんでした。

+0

+1、これは唯一の有効な回答です。「問題ではありません。 :-) –

+1

+1それは人間のために良いことを指摘してください。 – ChrisF

+0

もちろん、 '== true'はとにかく完全に冗長で、ほとんどの場合省略できます。 –

2

心配しないでください!

どのような半期の言語でも、ハイレベルのコードはどのような低レベルのコンストラクトにも変換されます。

最も読みやすいコードを生成する構造体を使用してください。ほとんどの言語では明示的に比較する必要はありません。可能であればif (foo == true)またはif (foo != false)ではなくif (foo)を使用してください。

4

いいえ、正しくありません。

.Netでbool?を扱う場合を除いて、決して書くべきではありません。
代わりにif (someBool)またはif (!someBool)と記述してください。

+0

なぜですか?それは本当に速いですか? – Pacane

+0

@パカン:確かに遅くはないし、読みやすくなっている。 – SLaks

+1

@パカン、いいえ、それはきれいです。 – Kendrick

2

決して、任意の非ゼロ値はから当量(必ずしもそうではないがに等しい)真である少なくともC== trueため、これまで、試験、C++Objective Cまたは関連する言語。許容

if (x) 
if (!x) 
if (x == false) 
if (x != false) 

間違っ及び危険:

if (x == true) 
if (x != true) 

性能局面は完全に無関係です。

+1

これは多分OPの誤解の根源だと思われます。たぶん、 '!= false'を使った方が' == true'より「良い」、「より速い」という意味が誤って解釈されているのかもしれません。 – LukeH

+0

@ルーク:はい、私はそこに頭の爪を打つと思います! –

+0

それはまさに私の考えでした。 – feketegy

3

もちろん、物事の壮大な計画では問題ではなく、読みやすさが重要です。しかしそれは何ですか?どうやって見つけますか?私たちはそれをテストします。公平を期すために、私たちは真==でTrueとFalseの値の等しい数をテストしますと= Pythonで偽:!

>>> from timeit import Timer 
>>> import time 
>>> f=Timer('x=True;x!=False;x=False;x!=False',timer=time.clock) 
>>> t=Timer('x=True;x==True;x=False;x==True',timer=time.clock) 
>>> f.timeit(number=10000000) 
3.2700000000000005 
>>> t.timeit(number=10000000) 
3.629999999999999 

は今、これはいくつかはtimeitランオーバーはかなり一貫しています。ワオ。 != Falseのテストは、== Trueのテストよりも速いです。あなたが10,000,000回する必要がある場合、あなたは0.5秒間勝つでしょう。その時をお楽しみください。

+0

+1 - 面白いです。 :-) –

+0

違いは何ですか? – JoelFan

+0

おそらくあなたがFacebookやGoogleのためにコード化している場合: – feketegy

関連する問題