ABAP - RETURN value
Nach all den Jahren ist nun endlich der "echte" Return in ABAP angekommen, in diesem Artikel zeigen wir dir, wie der funktioniert und was er kann.
Inhaltsverzeichnis
Mit dem letzten Release wurde das Return Statement im ABAP um eine wichtige Funktion erweitert auf die wahrscheinlich viele ABAP Entwickler seit Ewigkeiten warten. In diesem Artikel werden wir die Erweiterung beleuchten und testen.
Einleitung
Mit Release 2023 (7.58) wurde das RETURN Statement um eine neue Funktion erweitert, um in funktionalen Methoden (RETURNING) den Rückgabewert zu setzen. Möchten wir aktuell einen Wert setzen und dann die Logik verlassen, müssen wir zwei Statements verwenden.
rd_result = 20.
RETURN.
Diese Methodik wird vor allem dort verwendet, wo es während der Verarbeitung zu Fehlern kommt und die Methode vorzeitig verlassen werden soll.
Einfach
Schauen wir uns im ersten Fall einmal eine Methode mit einfacher Implementierung und einfachen Datentypen an. Bei 0 wollen wir die Methode vorzeitig beenden, danach führen wir einen RETURN aus und lassen und das Ergebnis zurückgeben. Zur Kontrolle führen wir noch ein letztes RETURN ein.
IF id_number = 0.
RETURN `Early exit.`.
ENDIF.
RETURN |Number was returned: { id_number }|.
RETURN `Dead end`.
Zum Test rufen wir die Methode mit den Werten 0, 1 und 2 auf und lassen uns das Ergebnis in die Konsole ausgeben.
Das Ergebnis ist wie erwartet, bei 0 wird die Methode vrozeitig verlassen und gibt uns den Satz "Early Exit" zurück. Für die anderen beiden Werte kommt die entsprechende Nummer zurück. "Dead end" wird niemals erreicht, da mit RETURN die Logik an dieser Stelle beendet wird.
Komplex
In einem etwas komplexeren Beispiel wollen wir uns den RETURN mit eine Struktur und Inline Deklaration anschauen. Bei Null geben wir die leere Variable zurück, bei allen anderen Werten befüllen wir per VALUE die Struktur und übergeben sie an RETURN.
DATA ls_data TYPE ts_structure.
IF id_number = 0.
RETURN ls_data.
ENDIF.
RETURN VALUE #( id = id_number
content = |The new ID is: { id_number }|
value = 'ID' && id_number ).
Wir führen die Methode mit 0 und 1 aus und bekommen unser erwartetes Ergebnis zurück.
Komplettes Beispiel
Möchtest du das Beispiel auf deinem System nachstellen, dann findest du hier die vollständige ausführbare Klasse für die Verwendung.
CLASS zcl_bs_demo_new_return DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PRIVATE SECTION.
TYPES:
BEGIN OF ts_structure,
id TYPE i,
content TYPE string,
value TYPE c LENGTH 15,
END OF ts_structure.
METHODS functional_method_call_simple
IMPORTING id_number TYPE i
RETURNING VALUE(rd_result) TYPE string.
METHODS functional_method_call_struct
IMPORTING id_number TYPE i
RETURNING VALUE(rs_result) TYPE ts_structure.
ENDCLASS.
CLASS zcl_bs_demo_new_return IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
out->write( functional_method_call_simple( 0 ) ).
out->write( functional_method_call_simple( 1 ) ).
out->write( functional_method_call_simple( 2 ) ).
out->write( functional_method_call_struct( 0 ) ).
out->write( functional_method_call_struct( 1 ) ).
ENDMETHOD.
METHOD functional_method_call_simple.
IF id_number = 0.
RETURN `Early exit.`.
ENDIF.
RETURN |Number was returned: { id_number }|.
RETURN `Dead end`.
ENDMETHOD.
METHOD functional_method_call_struct.
DATA ls_data TYPE ts_structure.
IF id_number = 0.
RETURN ls_data.
ENDIF.
RETURN VALUE #( id = id_number
content = |The new ID is: { id_number }|
value = 'ID' && id_number ).
ENDMETHOD.
ENDCLASS.
Fazit
Der neue RETURN erleichtert die Rückgabe bei funktionalen Methoden, vor allem da sie sich so verhält, wie in anderen Programmiersprachen. Für uns ist das eine Erleichterung, vor allem da mit ABAP OO die funktionalen Methoden immer mehr werden und es so für den Entwickler eindeutiger wird.
Quelle: