Vergleiche Wahrheitswerte niemals auf TRUE


Abstract

Dieser Artikel erläutert, warum man Wahrheitswerte nie direkt auf TRUE vergleichen sollte.

Warum ist das so? Gucken wir uns mal an wie wahr und falsch aka true und false definiert sind. false ist als null definiert und alles andere als true. Also false = 0 und true = [.., -2, -1, 1, 2, ..]. Soweit so gut. In Programmiersprachen sind jetzt für false und true Konstanten Deklariert. Für false ist das kein Problem:

const
  FALSE = 0;

Da man aber einen Konstantenbezeichner nur einen Wert zuweisen kann, fällt das bei true nicht mehr so leicht. Bei Delphi haben sich die Entwickler für -1 entschieden:

const
  TRUE = -1;

Nehmen wir jetzt mal eine Funktion, die einen Wahrheitswert zurückliefert in führen einen Vergleich durch:

if IsWahr = TRUE then
  ...;

Liefert IsWahr false zurück ist noch alles in Ordnung. Doch was ist, wenn die Funktion TRUE zurückliefert? Laut Defionition ist ja alles ausser null wahr. Die Funktion könnte jetzt also irgendeine Zahl ungleich null zurückliefern, was dem Wert wahr entspricht, unser Vergleich würde aber fehlschlagen, wenn das nicht zufälligerweise minus eins ist. Deswegen sollte man nie direkt mit TRUE vergleichen sondern es mehr oder weniger dem Compiler überlassen:

if IsWahr then
  ...;
2010-12-29T23:44:57 +0100, mail+homepage[at]michael-puff.de