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 denIF
-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>
imIF
-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 vorherigenIF
- undELSEIF
-Bedingungen falsch waren.
Funktionsweise und Ablauf
- Die Bedingungen werden strikt von oben nach unten geprüft (
IF
zuerst, dann das ersteELSEIF
, 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 weiterenELSEIF
-Bedingungen oder derELSE
-Block innerhalb derselbenIF...ENDIF
-Struktur mehr geprüft oder ausgeführt. - Wenn alle
IF
- undELSEIF
-Bedingungen falsch (abap_false
) sind, wird derELSE
-Block ausgeführt (sofern vorhanden). - Wenn alle Bedingungen falsch sind und es keinen
ELSE
-Block gibt, wird einfach mit der Anweisung nachENDIF
fortgefahren, ohne einen der Blöcke innerhalb derIF
-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
oderabap_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/ELSEIFIF 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
undSWITCH
.IF
bleibt jedoch für die Steuerung von Anweisungsblöcken unerlässlich.