Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Vergleich umdrehen (https://www.delphipraxis.net/215220-vergleich-umdrehen.html)

ernschd 29. Mai 2024 16:56

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:
if (0 = myInteger) then // die Variable heißt natürlich nicht wirklich so ;-)

oder

if ('' = Datum) then
Ich würde das nun gerne korrigieren, allerdings nur ungerne händisch. Gibt es hierfür eine Möglichkeit in Delphi?
In CnPack gibt es "EvalSwap", aber diese Funktion dreht nur die Zuweisungen um.

Vielen Dank im Voraus!

Grüße, ernschd

himitsu 29. Mai 2024 17:03

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:
if VariablePropertyOderFunktion = Konstante
, da dann der Compiler es so besser optimieren könnte.

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:

DeddyH 29. Mai 2024 18:36

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:
int myVar = 42;
if (myVar = 1) {
  doSomething();
}
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.
Code:
int myVar = 42;
if (1 = myVar) { // das ist kein valider Code mehr
  doSomething();
}
Somit weist einen der Compiler gleich auf den Fehler hin.

himitsu 29. Mai 2024 19:18

AW: Vergleich umdrehen
 
Ein guter Compiler/Interpreter gibt hier aber auch standardmäßig erstmal eine Warnung bei aus. :stupid:
(im PHP z.B.)

uligerhardt 29. Mai 2024 20:13

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.

Stolle58 30. Mai 2024 10:57

AW: Vergleich umdrehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die CnWizards besitzen eine Function "Eval Swap" die den Text umkehren kann.

Redeemer 30. Mai 2024 11:47

AW: Vergleich umdrehen
 
Zitat:

Zitat von DeddyH (Beitrag 1537291)
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:
int myVar = 42;
if (myVar = 1) {
  doSomething();
}
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.

Nennt sich Yoda Notations.
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