![]() |
Vergleich umdrehen
Hallo zusammen,
ich habe eine größeres Stück Code vor mir, in dem der Programmierer aus mir nicht nachvollziehbaren Gründen viele (aber nicht alle) Vergleiche "verdreht" hat. Beispiel:
Delphi-Quellcode:
Ich würde das nun gerne korrigieren, allerdings nur ungerne händisch. Gibt es hierfür eine Möglichkeit in Delphi?
if (0 = myInteger) then // die Variable heißt natürlich nicht wirklich so ;-)
oder if ('' = Datum) then In CnPack gibt es "EvalSwap", aber diese Funktion dreht nur die Zuweisungen um. Vielen Dank im Voraus! Grüße, ernschd |
AW: Vergleich umdrehen
Ich weiß jetzt nicht wie oft jemand sowas macht, aber vermutlich nicht oft, weswegen es schon sein könnte, dass es dafür (noch) nix gibt.
Ich hätte eher verstanden, wenn er es andersrum gedreht hätte, also
Delphi-Quellcode:
, da dann der Compiler es so besser optimieren könnte.
if VariablePropertyOderFunktion = Konstante
Er wertet das ja in dieser Reihenfolge aus, wie es da steht, kommt nun der Funktionsaufruf zuletzt, muß alles anderes vorher auf den Stack geschoben und nachher eventuell wieder runtergeholt werden, oder zumindestens als eine Referenz in den Stack, da beim Funktionsaufruf die meißten Register "leer" sein müssen, damit sie nicht ausversehn überschrieben werden. Ist die Konstante als Letztes, dann kann sie direkt genutzt werden, ohne unbedingt auf dem Stack zu landen. Hier finden einiges es geil unnötig viele Klammern in IFs einzubauen oder NOT wie einen Funktionsaufruf zu schreiben, also ohne Leerzeichen und mit Klammern danach oder ... Ohne Buntmalen vom Editor kann man da doch garnichts mehr einfach erkennen und selbst Mit nicht wirklich :wall: |
AW: Vergleich umdrehen
Das "Umdrehen" deutet darauf hin, dass der Autor sich zumindest gelegentlich auch mit C oder C-ähnlichen Sprachen beschäftigt. Dort ist z.B. das hier valider Code:
Code:
Eigentlich wollte er myVar mit 1 vergleichen, hat aber versehentlich statt des Vergleichsoperators "==" den Zuweisungsoperator "=" benutzt. Er weist also der Variablen myVar den Wert 1 zu, dies wird beim Vergleich (1 <> 0) dann zu true. Damit einem so etwas nicht passiert, dreht man das dann einfach um, da man auch in C/C++/Java etc. einer Konstanten keinen Wert zuweisen kann.
int myVar = 42;
if (myVar = 1) { doSomething(); }
Code:
Somit weist einen der Compiler gleich auf den Fehler hin.
int myVar = 42;
if (1 = myVar) { // das ist kein valider Code mehr doSomething(); } |
AW: Vergleich umdrehen
Ein guter Compiler/Interpreter gibt hier aber auch standardmäßig erstmal eine Warnung bei aus. :stupid:
(im PHP z.B.) |
AW: Vergleich umdrehen
Liste der Anhänge anzeigen (Anzahl: 1)
Die GExperts enthalten die im Anhang markierte Funktion, die Zuweisungen und for-Schleifen (to <=> downto) umdrehen kann. Da könntest du deinen Fall nachrüsten.
|
AW: Vergleich umdrehen
Liste der Anhänge anzeigen (Anzahl: 1)
Die CnWizards besitzen eine Function "Eval Swap" die den Text umkehren kann.
|
AW: Vergleich umdrehen
Zitat:
![]() Ist in Delphi Quatsch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz