2010-11-23 15 views
0

Ich glaube, ich irgendwo gelesen habe, dass die Auswertung der Negation (! = False) ist schneller als == true! = False vs. == true

Ist das richtig?

+6

Weiß nicht, aber man schreibt nie! = False oder == true trotzdem schreibt man if (~ x) oder if (x) - übersetzt in die Sprache (n) Ihrer Wahl. –

+3

Ich stelle mir vor, das ist komplett Sprache (und Implementierung) spezifisch. – Cameron

+1

@High Performance Mark: Ich denke, dass der Trend in letzter Zeit in die entgegengesetzte Richtung geht, weil Lesbarkeit wichtig ist und kein Leistungseinbruch vorliegt. – Eiko

Antwort

14

Das stimmt nicht. Alle modernen Compiler und Dolmetscher werden dies optimieren.

Was zählt (für mich zumindest) ist, dass == true ist viel schneller für ME zu interpretieren.

Denken Sie daran, vorzeitige Optimierung ist die Wurzel allen Übels.

Edit: Ja, ich benutze if(true). Aber das war nicht die Frage.

+0

+1, das ist die einzige gültige Antwort: "Es ist egal". :-) –

+1

+1 für das Aufzeigen, was für den Menschen besser ist. – ChrisF

+0

Aber natürlich ist '== true' sowieso völlig überflüssig und kann fast immer weggelassen werden. –

2

Mach dir keine Sorgen!

Jede halbwegs anständige Sprache wird Ihren High-Level-Code in ein beliebiges Low-Level-Konstrukt übersetzen, das ohnehin am schnellsten ist.

Verwenden Sie einfach das Konstrukt, das den lesbarsten Code erzeugt. Und in den meisten Sprachen müssen Sie nicht einmal einen expliziten Vergleich verwenden: Verwenden Sie möglichst if (foo) statt if (foo == true) oder if (foo != false).

4

Nein, es ist nicht korrekt.

Mit Ausnahme von bool? in .Net, sollten Sie auch niemals schreiben.
Stattdessen sollten Sie if (someBool) oder if (!someBool) schreiben.

+0

Warum ist das? ist es wirklich schneller? – Pacane

+0

@ Pacane: Es ist sicherlich nicht langsamer und es ist lesbarer. – SLaks

+1

@Pacane, nein, es ist sauberer. – Kendrick

2

Nie, je Test für == true, zumindest in C, C++, Objective C oder verwandten Sprachen, wobei jeder Nicht-Null-Wert ist äquivalent zu (aber nicht notwendigerweise gleich ) wahr.

Acceptable:

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

falsch und gefährlich:

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

Der Leistungsaspekt völlig irrelevant ist.

+1

Ich vermute, dass dies wahrscheinlich die Wurzel des Missverständnisses des OP ist. Vielleicht haben sie gelesen, dass "! = False" ist "besser" als "== wahr" und fehlinterpretiert "besser" bedeutet "schneller". – LukeH

+0

@LukeH: Ja, ich denke du hast den Nagel auf den Kopf getroffen! –

+0

Das war genau mein Gedanke. – feketegy

3

Natürlich spielt es im großen Schema der Dinge keine Rolle, und Lesbarkeit ist wichtiger. Aber was ist es? Wie finden wir heraus? Wir TESTEN es. Um fair zu sein wir eine gleiche Anzahl von Wahr und Falsch-Werte mit == testen Wahr und Falsch = in 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 

Nun ist dies ziemlich konsistent über ein paar timeit läuft. Beeindruckend. Testen für! = Falsch ist schneller als Testen == Wahr. Wenn Sie das 10.000.000 Mal tun müssen, gewinnen Sie eine halbe Sekunde. Genieße diese Zeit.

+0

+1 - Amüsant. :-) –

+0

Was verursacht den Unterschied? – JoelFan

+0

Vielleicht, wenn Sie für Facebook oder Google codieren :) – feketegy

Verwandte Themen