
Frage: Ich habe folgenden Quelltext (stark vereinfacht dargestellt):
var
a,b,c : Integer;
begin
a := 1;
b := 2;
if (a<10) or (b<10) or (a+b<10) then
begin
c := 3;
exit; // <-----
end;
MachIrgendWas();
Der Methodenaufruf "MachIrgendWas()" wird nur dann angesteuert, wenn das "exit" (siehe Pfeil) auskommentarisiert wird. Das hängt doch alles vom "IF" ab!!! Warum?
Antwort: Zuerst muss man sagen, daß diese Darstellung hier ganz bewusst STARK vereinfacht dargestellt wird.... so daß dies dem ambitioniertem Entwickler sofort auffällt: Die IF-Bedingung wird immer erfüllt. Und damit wird auch immer EXIT aufgerufen. "MachIrgendWas" wird als Statement/Ausdruck damit gar nicht mehr übersetzt und mit in das Executable aufgenommen. Und der Compiler optimiert das einfach weg.
Soweit, so einfach..... Trickreich wird das erst, wenn man komplexere Ausdrücke in der IF-Bedingung stehen hat, die man als normalsterblicher Programmierer nicht mehr sofort überblickt; die sich vielleicht aus Ausdrücken erst berechnen (die aber schon zur Compile-Zeit auswertbar sind).
Also Augen auf, bei IF <Bedingung> then begin .... exit .... end!