Betrachten Sie die folgenden Bedingungen:
%Vor%und
%Vor% Berücksichtigt nur int
.
Ich weiß, dass diese Bedingungen dem gleichen Zweck dienen und der Verarbeitungsunterschied vernachlässigbar ist. Doch was kann der Verarbeitungsunterschied zwischen den beiden sein?
Für int
und long
gibt es keinen wirklichen Unterschied, da beide in ganzen Zahlen handeln.
Dies liegt daran, dass 9 der nächste gültige Wert unter 10 ist.
Aber für float
, double
und andere Typen, die Werte enthalten können, die kleiner als eine ganze Zahl sind, gibt es einen großen Unterschied.
Überlegen Sie, wie diese Zahlen in Ihren beiden Fällen behandelt werden:
%Vor%Bearbeiten:
Im ersten Fall if (val < 10)
:
Zweiter Fall if (val <= 9)
:
Und das alles unter der Annahme, dass Sie mit "sauberen" Zahlen enden und Rundungs- oder Divisionsfehler wie 9.99999999999
und 10.000000000001
nicht durch irgendwelche Berechnungen eingeführt werden, die Sie ausführen.
Wenn Sie Gleitkommazahlen vergleichen, sollten Sie die integrierte Vergleichsmethode der Klasse verwenden.
%Vor%Bei Ganzzahlen gibt es keinen Unterschied im logischen Ablauf des Programms.
Aber verschiedene Standardlösungen verwenden eines der Symbole aus der Tradition, und als solche inoffiziellen Standards bleiben, erhöht es die Lesbarkeit, um das "richtige" Symbol zu verwenden, weil die Leute daran gewöhnt sind.
Wenn wir von Sprachen sprechen, die zu Assembler kompiliert werden, übersetzen sie beide (auf den meisten Architekturen) in einen direkten Prozessorbefehl (bedingter Sprung), was sie ziemlich ähnlich macht.
<=
kann nützlich sein, wenn Sie einen "Endpunkt" anstatt einer "Länge" haben. Nehmen wir zum Beispiel Folgendes:
Alternativ könnte man die Bedingung als i < 17
oder i < 32
schreiben, was sinnvoller sein könnte, aber so oder so versteckt sich die Tatsache, dass 16 die wichtige Zahl ist.
<=
kann auch gefährlich sein, beachten Sie:
Warum gefährlich? Wenn x = Integer.MAX_VALUE
, ist dies eine hinterhältige Endlosschleife. Sneaky, weil es nicht wie eine Endlosschleife aussieht. Es ist besonders hinterhältig, da es wahrscheinlich sehr selten ist, dass x
Integer.MAX_VALUE
ist, also wird es wahrscheinlich ein Fehler sein, der lange wartet und dann plötzlich auftaucht und unerwartete negative Werte von i
verursacht. Bei kürzeren Typen ist dies wahrscheinlich eher der Fall.
Berücksichtigt nur int
Es gibt keinen wirklichen Unterschied, dass beide gleich sind. Wenn Sie einen Leistungstest ausführen, wird ein zufälliges Ergebnis erzeugt, was dazu führt, dass beide gleich sind.
Nun, selbst wenn die Zahl int ist (für float und double ist & lt; = 9 nicht dasselbe wie & lt; 10), & lt; = 9 und & lt; 10 haben die gleiche Bedeutung, aber der Vergleich mit & lt; = erfordert zwei Prüfungen & lt; sowie == wobei & lt; ist nur ein kleiner als & lt; scheint besser
'& lt; =' sind zwei Zeichen und '& lt;' ist ein Zeichen.
Logischerweise ist es zusätzliche Arbeit für Ihren Sprachparser, die Anweisungen mit mehr Zeichen zu parsen.
Aber wenn Sie die Leistungstests ausführen, können Sie feststellen, dass "& lt;" ist manchmal langsamer als '& lt; ='. Dies liegt daran, dass der Unterschied in der Parsing-Zeit vernachlässigbar ist und andere Faktoren wie verfügbare Ressourcen während der Ausführungszeit dieser beiden Anweisungen die Performance-Statistiken mehr beeinflussen könnten.
In Zeiten wie diesen sollten Sie die Schreibweise beachten, die lesbarer ist und einer Standardnotation für die gesamte Anwendung folgt.
Tags und Links java c computer-science