Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi if not I = 0 then... (https://www.delphipraxis.net/164770-if-not-i-%3D-0-then.html)

MatthiasR 29. Nov 2011 11:44

Delphi-Version: 7

if not I = 0 then...
 
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.

Neutral General 29. Nov 2011 11:46

AW: if not I = 0 then...
 
Delphi wertet erst "not I" aus. Negiert also die Bits der Integer-Variable und vergleicht dann erst auf 0. Du musst in so einem Fall Klammern setzen.

MatthiasR 29. Nov 2011 12:02

AW: if not I = 0 then...
 
Ah, OK, da hätte ich jetzt selbst drauf kommen können. Vielen Dank! :-D

himitsu 29. Nov 2011 13:51

AW: if not I = 0 then...
 
Irgendwo in der OH steht auch nochmal eine Auflistung, was wie wann ausgewertet wird.

Klammern haben immer Vorrang
not vor allem
Negierung (-) wie ein not (- und not sind gleichrangig .. wer zuletzt kommt, ist eher dran)
and vor or
* und / vor + oder -
...

ConnorMcLeod 29. Nov 2011 14:05

AW: if not I = 0 then...
 
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.

Ralf Kaiser 5. Dez 2011 08:45

AW: if not I = 0 then...
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1138425)
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.

Kann ich mir nicht vorstellen. Da ist wahrscheinlich reiner Zufall.

Was soll den Programmieren mit Mathe zu tun haben? :wink:

Neutral General 5. Dez 2011 08:49

AW: if not I = 0 then...
 
Zitat:

Zitat von Ralf Kaiser (Beitrag 1139396)
Zitat:

Zitat von ConnorMcLeod (Beitrag 1138425)
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.

Was soll den Programmieren mit Mathe zu tun haben? :wink:

Das fragen sich die Berufsschulen wohl auch. In der Ausbildung zum Fachinformatiker hat man in 3 Jahren nicht 5 Minuten Mathe :roll:

himitsu 5. Dez 2011 09:28

AW: if not I = 0 then...
 
Die gehen wohl davon auß, daß man heutzutage noch Zeit zum Lernen hat, in den Grund-/Haupt-/Realschulen/Gymnasien

Jumpy 6. Dez 2011 07:45

AW: if not I = 0 then...
 
Zitat:

Zitat von Neutral General (Beitrag 1139400)
Zitat:

Zitat von Ralf Kaiser (Beitrag 1139396)
Zitat:

Zitat von ConnorMcLeod (Beitrag 1138425)
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.

Was soll den Programmieren mit Mathe zu tun haben? :wink:

Das fragen sich die Berufsschulen wohl auch. In der Ausbildung zum Fachinformatiker hat man in 3 Jahren nicht 5 Minuten Mathe :roll:

Kann ich aus derzeitiger Erfahrung nur bestätigen. Gleichzeitig bekomme ich auch immer wieder das Gefühl, das für das Programmieren auch Logik nicht so wichtig scheint.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz