ABAP IF-Anweisung: Bedingte Steuerung des Programmflusses

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

Die IF-Anweisung ist die zentrale Kontrollstruktur in ABAP zur Steuerung des Programmflusses basierend auf Bedingungen. Sie ermöglicht es, einen oder mehrere Anweisungsblöcke nur dann auszuführen, wenn eine bestimmte * logische Bedingung* erfüllt (wahr) ist. Man kann damit Verzweigungen im Programmablauf erstellen, um auf unterschiedliche Situationen oder Datenzustände zu reagieren.

Syntax

Die IF-Anweisung gibt es in verschiedenen Ausprägungen:

1. Einfache IF-Bedingung (ohne Alternative)

IF <logischer_ausdruck>.
" Anweisungsblock 1
" Dieser Block wird nur ausgeführt, wenn <logischer_ausdruck> wahr ist.
[Anweisung1_1].
[Anweisung1_2].
...
ENDIF.
  • IF: Leitet die Bedingungsprüfung ein.
  • <logischer_ausdruck>: Eine Bedingung, die zu wahr (abap_true) oder falsch (abap_false) ausgewertet wird.
  • ENDIF: Schließt den IF-Block ab.

2. IF-Bedingung mit Alternative (ELSE)

IF <logischer_ausdruck>.
" Anweisungsblock 1 (Wenn wahr)
...
ELSE.
" Anweisungsblock 2 (Wenn falsch)
...
ENDIF.
  • ELSE: Leitet den Block ein, der ausgeführt wird, wenn der <logischer_ausdruck> im IF-Teil falsch war.

3.IF-Bedingung mit mehreren Alternativen (ELSEIF) und optionalem ELSE

IF <logischer_ausdruck_1>.
" Anweisungsblock 1 (Wenn Ausdruck 1 wahr ist)
...
ELSEIF <logischer_ausdruck_2>.
" Anweisungsblock 2 (Wenn Ausdruck 1 falsch WAR und Ausdruck 2 wahr ist)
...
ELSEIF <logischer_ausdruck_3>.
" Anweisungsblock 3 (Wenn Ausdrücke 1 & 2 falsch WAREN und Ausdruck 3 wahr ist)
...
[ELSE. " Optionaler Block für alle anderen Fälle
" Anweisungsblock N (Wenn ALLE vorherigen Ausdrücke falsch waren)
...]
ENDIF.
  • ELSEIF: Prüft eine weitere Bedingung, aber nur, wenn alle vorherigen IF- und ELSEIF-Bedingungen falsch waren.

Funktionsweise und Ablauf

  • Die Bedingungen werden strikt von oben nach unten geprüft (IF zuerst, dann das erste ELSEIF, dann das zweite, usw.).
  • Sobald eine Bedingung als wahr (abap_true) erkannt wird, wird der zugehörige Anweisungsblock ausgeführt.
  • Ganz wichtig: Nach der Ausführung dieses einen Blocks springt das Programm **direkt zur Anweisung nach dem ENDIF **. Es werden keine weiteren ELSEIF-Bedingungen oder der ELSE-Block innerhalb derselben IF...ENDIF-Struktur mehr geprüft oder ausgeführt.
  • Wenn alle IF- und ELSEIF-Bedingungen falsch (abap_false) sind, wird der ELSE-Block ausgeführt (sofern vorhanden).
  • Wenn alle Bedingungen falsch sind und es keinen ELSE-Block gibt, wird einfach mit der Anweisung nach ENDIF fortgefahren, ohne einen der Blöcke innerhalb der IF-Struktur auszuführen.

Logische Ausdrücke

Der <logischer_ausdruck> kann verschiedene Formen annehmen:

  • Vergleiche: =, <>, <, >, <=, >= (z. B. count > 0, text = 'Ja')
  • Zustandsprüfungen: var IS INITIAL, ref_var IS BOUND
  • Boolesche Variablen: is_ok = abap_true
  • Logische Operatoren zur Verknüpfung:
    • AND: Beide Teilausdrücke müssen wahr sein.
    • OR: Mindestens einer der Teilausdrücke muss wahr sein.
    • NOT: Kehrt das Ergebnis des folgenden Ausdrucks um.
    • Beispiel: IF count > 0 AND is_active = abap_true.
  • Prädikatsfunktionen: Funktionen, die abap_true oder abap_false zurückgeben (z. B. line_exists(...)).

Verschachtelung

IF-Anweisungen können ineinander verschachtelt werden, um komplexere Entscheidungsbäume zu bauen. Eine gute Einrückung ist hier für die Lesbarkeit unerlässlich.

IF condition1.
IF condition2.
" ... "
ENDIF.
ELSE.
" ... "
ENDIF.

Beispiele

1. Einfaches IF

DATA quantity TYPE i VALUE 15.
IF quantity > 10.
WRITE / 'Bestellmenge ist größer als 10.'.
ENDIF.

2. IF mit ELSE

DATA user_input TYPE c LENGTH 1.
user_input = 'X'. " Beispielhafte Eingabe
IF user_input = 'J'.
WRITE / 'Benutzer hat Ja gesagt.'.
ELSE.
WRITE / 'Benutzer hat nicht Ja gesagt.'.
ENDIF.

3. IF mit ELSEIF und ELSE

DATA score TYPE i VALUE 75.
DATA grade TYPE c LENGTH 1.
IF score >= 90.
grade = '1'.
ELSEIF score >= 70.
grade = '2'.
ELSEIF score >= 50.
grade = '3'.
ELSE.
grade = '4'.
ENDIF.
WRITE / 'Die Note ist:', grade. " Ausgabe: Die Note ist: 2

4. Kombinierte Bedingung (AND)

DATA has_permission TYPE abap_bool VALUE abap_true.
DATA is_logged_in TYPE abap_bool VALUE abap_true.
IF has_permission = abap_true AND is_logged_in = abap_true.
WRITE / 'Zugriff gewährt.'.
ELSE.
WRITE / 'Zugriff verweigert.'.
ENDIF.

Abgrenzung zu CASE

Wenn man dieselbe Variable gegen mehrere verschiedene, feste Werte prüfen möchte, ist die CASE-Anweisung oft übersichtlicher als eine lange Kette von IF ... ELSEIF-Anweisungen:

DATA transportmittel TYPE c LENGTH 1. " F=Fahrrad, A=Auto, B=Bus
transportmittel = 'A'.
" Mit IF/ELSEIF
IF transportmittel = 'F'.
WRITE / 'Fahrrad gewählt.'.
ELSEIF transportmittel = 'A'.
WRITE / 'Auto gewählt.'.
ELSEIF transportmittel = 'B'.
WRITE / 'Bus gewählt.'.
ELSE.
WRITE / 'Unbekannt.'.
ENDIF.
" Mit CASE (oft lesbarer)
CASE transportmittel.
WHEN 'F'.
WRITE / 'Fahrrad gewählt.'.
WHEN 'A'.
WRITE / 'Auto gewählt.'.
WHEN 'B'.
WRITE / 'Bus gewählt.'.
WHEN OTHERS.
WRITE / 'Unbekannt.'.
ENDCASE.

Wichtige Hinweise / Best Practice

  • Die IF-Anweisung ist fundamental für fast jedes ABAP-Programm.
  • Achten Sie auf klare und eindeutige logische Ausdrücke.
  • Verwenden Sie Einrückungen konsequent, um die Struktur lesbar zu machen.
  • Vergessen Sie nie das abschließende ENDIF.
  • Für rein wertbasierte Zuweisungen gibt es in modernem ABAP (>= 7.40) oft kompaktere Alternativen wie die bedingten Operatoren COND und SWITCH. IF bleibt jedoch für die Steuerung von Anweisungsblöcken unerlässlich.