CONTINUE, CHECK, EXIT und RETURN

Vor kurzem musste ich wieder einmal ein ABAP Klasse korrigieren, in der die Bedeutung von CONTINUE und RETURN offensichtlich verwechselt wurde. Eigentlich sollte innerhalb eines Schleifendurchlaufs an einer Stelle der aktuelle Durchlauf beendet werden und mit dem nächsten Tabelleneintrag weitergemacht werden. Aber leider wurde dies mit RETURN Anweisung implementiert. RETURN verlässt sofort die komplette Methode.

Daraufhin habe ich mit einigen Kollegen über die Aufgabenstellung diskutiert und es hat sich herausgestellt, dass manchmal Unklarheit bei der Verwendung von CONTINUE, RETURN, STOP, EXIT, CHECK … herrscht.

Daher versuche ich hier kurz Klarheit in die vielen Kommandos zu bringen. Bitte beachtet, dass ich nicht auf die Ausnahmen (klassisch und klassenbasierte) eingehe, das ist ein gänzlich anderes Thema. Aber natürlich wird auch durch Ausnahmen eine Prozedur verlassen.

Schleifen abbrechen

SAP kennt die folgenden Schleifenarten: LOOP / ENDLOOP, DO / ENDDO, WHILE / ENDWHILE und nicht zu vergessen SELECT / ENDSELECT – Wobei, eigentlich kann man SELECT/ENDSELECT gerne vergessen …

  • Mit CONTINUE kann man den aktuellen Schleifendurchlauf ohne Bedingung abbrechen. Nach der Anweisung werden die übrigen Anweisungen übersprungen und der nächste Schleifendurchlauf beginnt.
  • Mit CHECK <bedingung> kann man ebenfalls den aktuellen Schleifendurchlauf mit Bedingung abbrechen. Wenn die Bedingung nicht erfüllt ist, wird gleich wie bei CONTINUE die weitere Verarbeitung übersprungen und der nächste Durchlauf beginnt.
  • Verwendet man hingegen EXIT, wird die aktuelle Schleife vollständig beendet und der Programmablauf nach dem schließenden Teil (ENDLOOP, ENDDO, ENDWHILE, ENDSELECT) fortgesetzt. Wenn es sich um verschachtelte Schleifen handelt, wird hier nur die aktuelle Schleife beendet.

Ganz schlimm finde ich ein DO 1 TIMES/ENDDO. Dies wird manchmal verwendet um aus diesem Bereich DO/ENDDO an einer beliebigen Stelle mit EXIT auszusteigen.

Prozeduren verlassen

Prozeduren verlassen

Wenn man Prozeduren vor der END… – Anweisung verlassen möchte, so stehen ans ich in ABAP die Kommandos RETURN, EXIT und CHECK <bedingung> zur Verfügung. Diese Anweisungen beenden eine Prozedur ordnungsgemäß, dadurch werden auch Ausgabe- bzw. Rückgabewerte an die aufrufende Stelle übergeben.

Im Sinne der Lesbarkeit gibt auch SAP die Empfehlung aus, Prozeduren nur mit RETURN zu verlassen.

Prozeduren können weiters wie folgt verlassen werden:

  • Aufruf einer Einheit ohne Rückkehr (SUBMIT, CALL TRANSACTION, … )
  • Auslösen einer Ausnahme
  • Senden einer Dialognachricht (MESSAGE)

Ereignisblöcke verlassen

Der Vollständigkeit halber sind hier noch die Anweisungen REJECT und STOP zu erwähnen. Damit können Ereignisblöcke von Dialogmodulen und Reports (AT, … ) verlassen werden. Da es jedoch schon lange die Regel gibt, in klassischen Ereignisblöcken nur noch Methodenaufrufe von Klassen zu implementieren, sollten diese Fälle in neuen Programmen nicht mehr auftreten. Siehe auch https://help.sap.com/doc/abapdocu_750_index_htm/7.50/de-DE/abenabap_obj_progr_model_guidl.htm

Leider können RETURN, EXIT und CHECK auch zum Beenden von Ereignisblöcken eingesetzt werden und REJECT und STOP können auch bei Prozeduren eingesetzt werden. Dies sollte jedoch unbedingt vermieden werden.

Zusammenfassend

  • Schleifendurchlauf mit CONTINUE oder CHECK beenden
  • Schleife mit EXIT beenden
  • Prozeduren mit RETURN verlassen