Home » Object Pascal » Boolesche Operatoren

Boolesche Operatoren

Notation von logischen Bedingungen

Eine logische Bedingung wie x>0 versteht jeder, der schon einmal Mathematikunterricht hatte. Allerdings kann eine Bedingung auch aus mehreren einzelnen Bedingungen bestehen:
z. B. x größer als 0 und kleiner als 10. In Pascal kann man das leider nicht schreiben wie in Mathe (00 und x<10; mehrere einzelne Bedingungen müssen in Pascal jeweils von runden Klammern umgeben werden. Außerdem werden die folgenden logischen Operatoren verwendet: and, or, not, xor
Das Ergebnis einer logischen Bedingung ist immer ein Wahrheitswert (true oder false). Unser Beispiel lautet nun also:

 (x>0) and (x<10)

Mehrere solche Bedingungen können wie in der Mathematik mit Klammern gruppiert werden, z. B.

 ((x>0) and (x<10)) or ((y>0) and (y<10))

Solche Bedingungen können dann als Verzweigungsbedingungen (s.o.) oder auch als Abbruch- bzw. Durchlaufbedingungen bei Schleifen verwendet werden:

 if ((x>0) and (x<10)) or ((y>0) and (y<10)) then ...

Kurzschlussverfahren

Standardmäßig verwendet der Delphi-Compiler das Kurzschlussverfahren bei der Auswertung der logischen Operatoren and und or. Das bedeutet, dass er von links nach rechts vorgeht. Eine and-Operation ergibt beispielsweise nur true, wenn beide Operanden true sind. Ist nur einer false, kann der Ausdruck nicht mehr true werden.
Steht in einem Quellcode also

 if  and

wird die Auswertung des Ausdrucks abgebrochen, wenn Bedingung1 bereits false ist. Egal, welches Ergebnis Bedingung2 liefert, der Ausdruck ergibt false. Deshalb wird im Kurzschlussverfahren Bedingung2 in diesem Fall völlig ignoriert, was zu einer schnelleren Ausführung beiträgt.
Dennoch lässt sich über die Compiler-Direktive $B einstellen, dass eine vollständige Auswertung durchgeführt werden soll, falls das einmal nötig ist. Standardeinstellung ist {$B-} für das Kurzschlussverfahren.

Operatoren überladen

Ab Delphi 2006

Unter Delphi ab Delphi 2006 ist es möglich, Operatoren zu überladen. Das bedeutet, dass der Programmierer festlegen kann, was z.B. passiert, wenn zwei Klassen mit dem +-Operator addiert werden. Dazu wird mit der Syntax class operator eine Methode deklariert und implementiert. Der Name der Methode richtet sich nach dem Operator, der überladen werden soll. So lautet der Name für den +-Operator Add, für > GreaterThan und für = Equal. Die weiteren Operatoren-Methodennamen sind in der Hilfe zu finden.
Deklaration:

type
 TMyClass = class
 class operator Add(a, b: TMyClass): TMyClass;
 end;

Implementierung:

class operator TMyClass.Add(a, b: TMyClass): TMyClass;
begin
 ...
end;

Die Methode Add kann nicht direkt aufgerufen werden. Stattdessen muss das Pluszeichen verwendet werden.
Eine genauere Beschreibung der Operatorenüberladung ist in unserem Tutorial „Das Überladen von Operatoren“ zu finden.