Ich habe gerade eine seltsame Entdeckung gemacht. Und verhält sich Delphi bei der Auswertung eines bestimmten boole'schen Ausdrucks nicht so, wie ich es erwarten würde. Konkret handelt es sich um folgende Abfrage:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
I: Integer;
begin
I := 1234;
if not I = 0 then
ShowMessage('Test');
end;
Normalerweise würde ich eine solche Abfrage so formulieren:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
I: Integer;
begin
I := 1234;
if I <> 0 then
ShowMessage('Test');
end;
Oder alternativ eben mit Klammer:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
I: Integer;
begin
I := 1234;
if not (I = 0) then
ShowMessage('Test');
end;
Ich dachte allerdings bisher, auch die erste Variante würde zum Ziel führen, da sich Delphi auch nicht darüber beschwert, dass "I" bspw. selbst kein boole'scher Ausdruck ist und "not I" damit ebenfalls nicht. In welcher Reihenfolge wertet Delphi den ersten Ausdruck denn dann aus, wenn es ihn insgesamt als korrekten boole'schen Ausdruck wertet? Fakt ist jedenfalls, dass der if-Zweig nur in den beiden letztgenannten Ausdrücken durchlaufen wird.