Die EXIT
-Anweisung ist eine Kontrollanweisung in ABAP, die dazu dient, die Ausführung eines bestimmten
Verarbeitungsblocks sofort und unbedingt zu beenden. Die Hauptanwendungsfälle für EXIT
sind:
- Beenden von Schleifen: Vorzeitiges Verlassen einer kompletten
DO
,WHILE
oderLOOP AT ... ENDLOOP
Schleife. - Beenden von Unterprogrammen: Vorzeitiges Verlassen eines
FORM ... ENDFORM
Unterprogramms.
Im Gegensatz zu CONTINUE
(das nur den aktuellen Schleifendurchlauf überspringt) oder CHECK
(das bedingt überspringt
oder verlässt), beendet EXIT
den gesamten umschließenden Block (Schleife oder FORM) endgültig.
Syntax
Die grundlegende und am häufigsten verwendete Syntax ist:
EXIT.
Es gibt auch spezialisierte Formen wie EXIT FROM STEP-LOOP
oder EXIT FROM SQL
, die aber in der modernen
ABAP-Entwicklung seltener relevant sind.
Funktionsweise und Verhalten
Das Verhalten von EXIT
hängt vom Kontext ab:
1. Innerhalb einer Schleife (DO
, WHILE
, LOOP AT
)
EXIT
beendet sofort die gesamte Schleife, unabhängig davon, wie viele Durchläufe noch geplant wären.- Die Programmausführung wird mit der ersten Anweisung nach dem schließenden Statement der Schleife (
ENDDO
,ENDWHILE
,ENDLOOP
) fortgesetzt. - Bei verschachtelten Schleifen (eine Schleife innerhalb einer anderen) beendet
EXIT
immer nur die innerste Schleife, in der es direkt steht.
2. Innerhalb eines Unterprogramms (FORM ... ENDFORM
)
EXIT
beendet sofort das gesamte Unterprogramm.- Die Kontrolle kehrt zum aufrufenden Programmteil zurück, und zwar zur Anweisung direkt **nach dem
PERFORM
-Aufruf **.
3. In anderen Kontexten
- Die Verwendung von
EXIT
direkt in Ereignisblöcken (z.B.START-OF-SELECTION
) zum Beenden des gesamten Programms ist zwar technisch möglich, gilt aber als schlechter Programmierstil und ist veraltet. Dafür sollteLEAVE PROGRAM
verwendet werden. - In modernen ABAP-Methoden (
METHOD ... ENDMETHOD
) wirdEXIT
nicht zum Verlassen der Methode verwendet. Dafür ist die AnweisungRETURN
vorgesehen.
Abgrenzung zu anderen Kontrollanweisungen
Es ist wichtig, EXIT
von ähnlichen Anweisungen zu unterscheiden:
CONTINUE
: (Nur in Schleifen) Überspringt den Rest des aktuellen Schleifendurchlaufs und startet den nächsten Durchlauf. Die Schleife selbst wird nicht beendet.CHECK <bedingung>.
: (In Schleifen/FORMs) Überspringt den Rest des Durchlaufs (CONTINUE
) oder verlässt das FORM (EXIT
), aber nur wenn die Bedingung falsch ist.RETURN
: (In Methoden/Funktionsbausteinen) Beendet die Ausführung der Methode oder des Funktionsbausteins und kehrt zum Aufrufer zurück.LEAVE PROGRAM
: Beendet das gesamte ABAP-Programm.EXIT
: Beendet die gesamte Schleife oder das gesamte FORM unbedingt.
Beispiele
1. EXIT
in LOOP AT
(Suche abbrechen)
DATA: product_list TYPE STANDARD TABLE OF string, search_item TYPE string VALUE 'Banana'.
APPEND 'Apple' TO product_list.APPEND 'Pear' TO product_list.APPEND 'Banana' TO product_list.APPEND 'Orange' TO product_list.
WRITE: / 'Searching for:', search_item.DATA found TYPE abap_bool VALUE abap_false.
LOOP AT product_list INTO DATA(product). WRITE: / 'Checking:', product. IF product = search_item. found = abap_true. WRITE: ' -> Found! Exiting loop.'. EXIT. " Exit the LOOP AT statement ENDIF.ENDLOOP.
IF found = abap_true. WRITE: / 'Item was found in the list.'.ELSE. WRITE: / 'Item was not found.'.ENDIF.WRITE: / 'Processing continues after the loop.'.
Ausgabe:
Searching for: BananaChecking: AppleChecking: PearChecking: Banana -> Found! Exiting loop.Item was found in the list.Processing continues after the loop.
2. EXIT
in WHILE
(Bedingung im Schleifenkörper)
DATA counter TYPE i VALUE 0.DATA limit TYPE i VALUE 5.
WHILE counter < 10. " Theoretisch bis 9 counter = counter + 1. WRITE: / 'WHILE loop, counter:', counter.
IF counter = limit. WRITE: ' -> Limit reached, exiting WHILE loop.'. EXIT. " Exit the WHILE loop ENDIF.
" Dieser Teil wird nach EXIT nicht mehr erreicht WRITE: ' -> Processing normally.'.ENDWHILE.
WRITE: / 'After WHILE loop.'.
Ausgabe:
WHILE loop, counter: 1 -> Processing normally.WHILE loop, counter: 2 -> Processing normally.WHILE loop, counter: 3 -> Processing normally.WHILE loop, counter: 4 -> Processing normally.WHILE loop, counter: 5 -> Limit reached, exiting WHILE loop.After WHILE loop.
3. EXIT
in FORM
(Unterprogramm verlassen)
START-OF-SELECTION. PERFORM check_value USING 50. PERFORM check_value USING -10. " Fehlerfall PERFORM check_value USING 100.
FORM check_value USING iv_value TYPE i. WRITE: / 'FORM entered with value:', iv_value.
IF iv_value < 0. WRITE: ' -> Invalid value, exiting FORM.'. EXIT. " Exit the FORM subroutine ENDIF.
" Dieser Teil wird nur für positive Werte erreicht WRITE: ' -> Value is valid, processing...'.ENDFORM.
WRITE: / 'Main program continues.'.
Ausgabe:
FORM entered with value: 50 -> Value is valid, processing...FORM entered with value: -10 -> Invalid value, exiting FORM.FORM entered with value: 100 -> Value is valid, processing...Main program continues.
4. EXIT
in verschachtelten Schleifen
DO 2 TIMES. " Outer loop DATA(outer_idx) = sy-index. WRITE: / 'Outer Loop:', outer_idx. DO 3 TIMES. " Inner loop DATA(inner_idx) = sy-index. WRITE: | Inner Loop: { inner_idx }|. IF outer_idx = 1 AND inner_idx = 2. WRITE: ' -> Exiting INNER loop!'. EXIT. " Exits the inner DO loop only ENDIF. ENDDO. " End of inner loop WRITE: | -> After Inner Loop (Outer: { outer_idx })|.ENDDO. " End of outer loop
Ausgabe:
Outer Loop: 1 Inner Loop: 1 Inner Loop: 2 -> Exiting INNER loop! -> After Inner Loop (Outer: 1)Outer Loop: 2 Inner Loop: 1 Inner Loop: 2 Inner Loop: 3 -> After Inner Loop (Outer: 2)
Wichtige Hinweise / Best Practice
EXIT
ist unbedingt. Es beendet den Block sofort, wenn es erreicht wird.- Daher wird
EXIT
fast ausschließlich innerhalb einerIF
-Anweisung platziert, um den Abbruch von einer bestimmten Bedingung abhängig zu machen (IF <condition> THEN EXIT. ENDIF.
). - Verwende
EXIT
gezielt, wenn die Fortsetzung der Schleifen- oder FORM-Verarbeitung keinen Sinn mehr ergibt oder ein Abbruch erforderlich ist (z.B. nach dem Finden eines Elements, bei einem Fehler). - Kenne die Alternativen (
CONTINUE
,CHECK
,RETURN
,LEAVE PROGRAM
) und setze sie entsprechend ihrem Zweck ein.