Programmierung mit Boolean-Werten
Programmieren mit Boolean-Werten
Genug der grauen Theorie. Sehen wir uns nun einmal an, wo uns beim Programmieren überall Boolean-Werte begegnen:
Boolean-Variablen
var b: Boolean;
Boolean-Variablen werden genau so deklariert, wie Integer und Stringvariablen z.B. auch. Rechnen kann man damit, wie oben beschrieben, mit den Operatoren and, or, not, xor und =. Dabei ist auch die Klammerung wichtig. Also im Zweifelsfall lieber mehr Klammern setzen…
Funktionsrückgabewert
Viele Funktionen liefern als Ergebnis einen Boolean-Wert zurück. Dieser lässt sich dann auch in einer Variablen speichern:
var ok: Boolean; begin ok := OpenDialog1.Execute; // Execute() gibt einen Boolean-Wert zurück // oder gleich auswerten: if SaveDialog1.Execute then SaveFile;
Properties
if CheckBox1.Checked then ...
Boolean-Ausdrücke
if a > b then DoSth;
a > b ist hierbei ein Boolean-Ausdruck. Dieser ist genau dann True, wenn a größer als b ist… 😉
Kurzschluss?
Zur Auswertung von Boolean-Ausdrücken ist noch Folgendes zu sagen:
Bei
if a and b then
wird u.U. b gar nicht mehr geprüft, wenn a schon false ist. Ebenso ist es mit
if a or b
Hier wird die Auswertung unterbrochen, wenn a schon true ist. Dieses Verhalten wird manchmal Kurzschluss-Auswertung (short-circuit evaluation) genannt. In den Projektoptionen (Projekt–>Optionen–>Compiler–>Vollst. Boolesche Auswertung) kann man dieses Verhalten abstellen. Dies ist jedoch nicht zu empfehlen, da die VCL diese teilweise recht ausgiebig nutzt. Über entsprechende Compiler-Direktiven lässt sich die Kurzschlussauswertung auch für bestimmte Code-Teile separat ausschalten:
{$B} // Vollständige Auswertung {$B-} // Kurzschluss-Auswertung; default
Am einfachsten (und übersichtlichsten) ist es jedoch, wenn man entsprechende If-Anweisungen einfach schachtelt:
if Assigned(Objekt) then begin if Objekt.Eigenschaft then begin ... end; end;
statt
if (Assigned(Objekt)) and (Objekt.Eigenschaft) then begin ... end;
So ist auf jeden Fall sicher gestellt, dass auf das Objekt nur zugegriffen wird, wenn dieses auch wirklich existiert…