![]() |
Zitat:
[edit]Genauer gesagt, true und false sind Executables (liegen normalerweise in /bin/), die einen Exitcode von 0 bzw. 1 zurückgeben.[/edit] MfG, d3g |
Sorry: True ist gleich 1 :oops:
Der Rest bleibt aber weiter wie beschrieben. Hier mal ein Beispiel:
Delphi-Quellcode:
Das sollte alles erklären.
// der Wert der Konstante True
ShowMessage('TRUE: ' + IntToStr(Integer(True))); // der Wert der Konstante True ShowMessage('FALSE: ' + IntToStr(Integer(False))); // ein Vergleich zweier gleicher Konstanten ShowMessage('2=2: ' + IntToStr(Integer(Boolean(2 = 2)))); // ein Vergleich zweier verschiedener Konstanten ShowMessage('1=2: ' + IntToStr(Integer(Boolean(1 = 2)))); // testen einer Konstante ungleich 0 if Boolean(5) then ShowMessage('Boolean(5) GILT ALS True') else ShowMessage('Boolean(5) GILT ALS False'); // testen einer Konstante gleich 0 if Boolean(0) then ShowMessage('Boolean(0) GILT ALS True') else ShowMessage('Boolean(0) GILT ALS False'); // testen ob eine Konstante (5), welche True is, auch gleich True ist if Boolean(5) = True then ShowMessage('Boolean(5) = True IST WAHR') else ShowMessage('Boolean(5) = True IST NICHT WAHR'); // testen ob eine Konstante (5), welche True is, gleich False ist if Boolean(5) = False then ShowMessage('Boolean(5) = False IST WAHR') else ShowMessage('Boolean(5) = False IST NICHT WAHR'); // testen ob eine Konstante (0), welche False is, gleich True ist if Boolean(0) = True then ShowMessage('Boolean(0) = True IST WAHR') else ShowMessage('Boolean(0) = True IST NICHT WAHR'); // testen ob eine Konstante (0), welche False is, auch gleich False ist if Boolean(0) = False then ShowMessage('Boolean(0) = False IST WAHR') else ShowMessage('Boolean(0) = False IST NICHT WAHR'); |
"True" war übrigens auch schon in Pascal gleich "1". Dies zeigt das folgende kleine Programm:
Code:
In den ersten beiden Zeilen wird "False = 0" und "True = 1" ausgegeben. Danach folgen dann ein "False" und 255 "True".
uses Crt;
var x: Boolean; y: Byte absolute x; begin ClrScr; x := False; WriteLn('False = ', y); x := True; WriteLn(' True = ', y); WriteLn; for y := 0 to 255 do Write(x:5); ReadLn; end. |
Hallo!
Meine Delphi-Hilfe sagt: Boolean: False = 0, True = 1 ByteBool, WordBool, Longbool: False = 0, True <> 0 Boolean ist Pascal, 1 Byte. Der Rest (1/2/4 Byte) ist aus Kompatibilität zu anderen Sprachen bzw. der Windows-API vorhanden. Die liefert bei einer bool-Prozedur 0 oder <> 0! Allerdings programmieren die auch mit der Beißzange:
Delphi-Quellcode:
1. ist OK nicht initialisiert und
var OK : Boolean;
... if x <> 0 then OK := True; if OK then ... 2. geht das ganz einfach:
Delphi-Quellcode:
Was soll übrigens
OK := x <> 0;
Zitat:
das if nach dem else ist doch überflüssig! Es reicht doch
Delphi-Quellcode:
Gruß
procedure TAboutBox.CheckBox1Click(Sender: TObject);
begin if CheckBox1.Checked then ShowMessage('Ein') else ShowMessage('Aus'); end; Dietmar Brüggendiek |
Ich gebe zu, das Beispiel war nicht gut, es sollte jedoch folgenden Konstrukten negieren.
Delphi-Quellcode:
Ich selbst programmiere sonst auch in Deiner Manier, das Beispiel ging wohl etwas daneben :D
procedure TAboutBox.CheckBox1Click(Sender: TObject);
begin if CheckBox1.Checked = True then begin ShowMessage('Ein'); end else if CheckBox1.Checked = False then begin ShowMessage('Aus'); end; end; |
Also: nie Booleans miteinander vergleichen, sonder nur:
Delphi-Quellcode:
Aber was ist mit der Menge begin und ends? Machen die auch was schlimmes?
if "boolean" then ...
|
Hallo!
Zitat:
Delphi-Quellcode:
Wenn a eine Variable ist, die nicht von asynchronen Prozessen (OnKeyPressed, OnTimer etc.) verändert wird, bleibt a dasselbe.
if a then
.. else if not a then .. Ändert ein asynchroner Prozess die Variable a, wird u.U. beides NICHT durchlaufen! Ist a eine Funktion, wird sie zweimal ausgeführt! Wenn die fragt, ob man das Programm wirklich beenden will, kommt die Frage bei "Nein" 2 mal! Was den Schreibaufwand betrifft: Informatiker sind so faul, daß sie lieber 2 Tage an einem Programm scheiben, als 2 Minuten zu arbeiten! :mrgreen: Gruß Dietmar Brüggendiek |
Zitat:
Es ist übersichtlicher/schöner; Sobald Du eine zweite Zeile dazu schreibst, fällt man genauso aus die "Nase", wie mit dem fehlenden Semikolon; Auch hier meine Meinung, immer hinschrieben auch wenn nud ein Exit; dazwischen steht; Grüsse, Daniel :hi: |
Problem kann hier besonders auch sein, dass man nicht drauf hingewiesen wird als
Code:
Hat man zb einen Befehl nach einem if, und fügt einen dazu ohne mit begin end; nachzurüsten kann das schon nervraubende Folgen haben.
[Error] Unit1.pas(28): Missing operator or semicolon
Gruß, Sebastian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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 by Thomas Breitkreuz