4.3.1. if-Anweisung

Es gibt zwei Formen der if-Anweisung: if...then und if...then...else. Die Syntax einer if...then-Anweisung lautet folgendermaßen:
Quelltext-Beispiel:
1
2
if Ausdruck then
  Anweisung;
Das Ergebnis von Ausdruck ist ein Wert vom Typ Boolean. Anweisung wird nur ausgeführt, wenn der Ausdruck True ergibt. Ein Beispiel:
Quelltext-Beispiel:
1
2
if J <> 0 then
  Result := I/J;
Die Syntax einer if...then...else-Anweisung lautet
Quelltext-Beispiel:
1
2
3
4
if Ausdruck then
  Anweisung1
else
  Anweisung2;
Das Ergebnis von Ausdruck ist ein Wert vom Typ Boolean. Wenn der Ausdruck True ergibt, wird Anweisung1 ausgeführt, andernfalls Anweisung2. Ein Beispiel:
Quelltext-Beispiel:
1
2
3
4
if J = 0 then
  Exit
else
  Result := I/J;
Die then- und else-Klauseln enthalten jeweils nur eine Anweisung. Hinter einer if-Anweisung kann eine Verbundanweisung folgen. Es kann sich hierbei auch um eine strukturierte Anweisung handeln:
Quelltext-Beispiel:
1
2
3
4
5
6
7
8
9
10
if J <> 0 then
begin
  Result := I/J;
  Count := Count + 1;
end
else
  if Count = Last then
    Done := True
  else
    Exit;
Zwischen der then-Klausel und dem Wort else darf kein Strichpunkt stehen. Nach einer vollständigen if-Anweisung können Sie einen Strichpunkt verwenden, um sie von der nächsten Anweisung innerhalb des Blocks zu trennen. Zwischen der then- und der else-Klausel wird nur ein Leerzeichen oder ein Wagenrücklaufzeichen benötigt. Das Einfügen eines Strichpunkts vor dem Wort else (in einer if-Anweisung) stellt einen der häufigsten Programmierfehler dar.
Auch verschachtelte if-Anweisungen bergen die Gefahr von Programmierfehlern. Das Problem besteht darin, daß für bestimmte if-Anweisungen else-Klauseln existieren, für andere jedoch nicht. Ansonsten ist die Syntax für die beiden if-Konstrukte identisch. Wenn in einer Folge von Bedingungen weniger else-Klauseln als if-Anweisungen vorhanden sind, ist möglicherweise die Zuordnung der else-Klauseln zu den if-Anweisungen nicht eindeutig erkennbar. Die Anweisung
Quelltext-Beispiel:
1
if Ausdruck1 then if Ausdruck2 then Anweisung1 else Anweisung2;
könnte demnach auf zwei Arten interpretiert werden:
Quelltext-Beispiel:
1
2
if Ausdruck1 then [ if Ausdruck2 then Anweisung1 else Anweisung2 ];
if Ausdruck1 then [ if Ausdruck2 then Anweisung1 ] else Anweisung2;
Der Interpreter verwendet immer die erste Interpretationsart. Dies bedeutet, daß die Anweisung
Quelltext-Beispiel:
1
2
3
4
5
if ... { Ausdruck1 } then
  if ... { Ausdruck2 } then
    ... { Anweisung1 }
  else
    ... { Anweisung2 } ;
mit diesem Konstrukt identisch ist:
Quelltext-Beispiel:
1
2
3
4
5
6
7
if ... { Ausdruck1 } then
begin
  if ... { Ausdruck2 } then
    ... { Anweisung1 }
  else
    ... { Anweisung2 }
end;
Die Interpretation von verschachtelten Bedingungen beginnt immer bei der innersten Bedingung. Dabei wird jedes else dem letzten vorhergehenden if zugeordnet. Wenn der Compiler die zweite Interpretationsart verwenden soll, muß der Quelltext folgendermaßen aussehen:
Quelltext-Beispiel:
1
2
3
4
5
6
7
if ... { Ausdruck1 } then
begin
  if ... { Ausdruck2 } then
    ... { Anweisung1 }
end
else
  ... { Anweisung2 } ;