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 (
IFzuerst, 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 nachENDIFfortgefahren, 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_trueoderabap_falsezurü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: 24. 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
CONDundSWITCH.IFbleibt jedoch für die Steuerung von Anweisungsblöcken unerlässlich.