ABAP For Operator, alles was ihr darüber wissen müsst!
Die Sprache hat sich mit der Einführung von ABAP 7.40 und vor allem ABAP 7.50 stark weiterentwickelt. Früher mussten Entwickler mit klassischen Schleifen (LOOP AT, DO, WHILE) oder umständlichen Konstruktionen arbeiten. Heute können sie auf moderne Operatoren wie FOR, REDUCE, VALUE und NEW zurückgreifen.
Das macht die Syntax kompakter, lesbarer und performanter. Das beschleunigt die Entwicklung und verbessert die Wartbarkeit des Codes.In diesem Beitrag erklären wir detailliert, wie die einzelnen Operatoren funktionieren, geben praktische Anwendungsbeispiele und vergleichen sie mit klassischen ABAP-Techniken.
Der FOR-Operator – Die neue Art der Iteration
Der FOR-Operator ist echt stark. Er kann in einer einzigen Anweisung über eine interne Tabelle iterieren. Anstatt einer klassischen Schleife machst du die Iteration als Ausdruck. Das führt zu einer kompakteren Schreibweise.
Beispiel: FOR statt LOOP AT
Vor ABAP 7.40 wurde eine interne Tabelle wie folgt iteriert:
DATA: lt_numbers TYPE TABLE OF i,
lt_result TYPE TABLE OF i.
APPEND 1 TO lt_numbers.
APPEND 2 TO lt_numbers.
APPEND 3 TO lt_numbers.
LOOP AT lt_numbers INTO DATA(lv_num).
APPEND lv_num * 2 TO lt_result.
ENDLOOP.
Mit FOR kann derselbe Code effizienter geschrieben werden:
DATA(lt_result) = VALUE #( FOR num IN lt_numbers ( num * 2 ) ).
In dieser Variante durchläuft FOR automatisch alle Werte in lt_numbers, verdoppelt sie und speichert sie direkt in lt_result. Die neue Syntax ist nicht nur kürzer, sondern auch leichter zu lesen.
Anwendungsfälle für FOR
- Transformation von Tabelleninhalten
- Filtern von Einträgen
- Konvertierung von Datenstrukturen
Der FOR-Operator kann in Kombination mit VALUE, REDUCE und weiteren ABAP-Funktionen verwendet werden, um noch leistungsfähigere Anweisungen zu formulieren.
VALUE – Tabellen und Strukturen effizient erzeugen
Mit VALUE lassen sich interne Tabellen und Strukturen direkt befüllen, ohne dass separate Zuweisungen erforderlich sind.
Beispiel: VALUE für Tabellen
Früher war das Erstellen einer internen Tabelle mit Werten ein mehrstufiger Prozess:
DATA: lt_flights TYPE TABLE OF sflight.
APPEND VALUE sflight( carrid = 'LH' connid = '400' ) TO lt_flights.
APPEND VALUE sflight( carrid = 'UA' connid = '500' ) TO lt_flights.
Mit VALUE kann dasselbe eleganter ausgedrückt werden:
DATA(lt_flights) = VALUE sflight_table(
( carrid = 'LH' connid = '400' )
( carrid = 'UA' connid = '500' )
).
Diese Schreibweise verbessert die Lesbarkeit und vermeidet unnötige APPEND-Befehle.
Beispiel: VALUE für Strukturen
Auch das Befüllen einer Struktur kann mit VALUE vereinfacht werden:
DATA(ls_flight) = VALUE sflight( carrid = 'LH' connid = '400' ).
Anstatt eine Struktur zeilenweise zu füllen, werden alle Werte in einer kompakten Anweisung gesetzt.
NEW – Instanziierung von Objekten
NEW ist eine nützliche Ergänzung für objektorientierten ABAP, da es die Erstellung von Klasseninstanzen vereinfacht.
Beispiel: NEW für Objekte
Vorher musste eine Instanz mit CREATE OBJECT erzeugt und separat initialisiert werden:
DATA: lo_airplane TYPE REF TO zcl_airplane.
CREATE OBJECT lo_airplane.
lo_airplane->set_model( 'A380' ).
Mit NEW kann die Initialisierung direkt in einer Zeile erfolgen:
DATA(lo_airplane) = NEW zcl_airplane( model = 'A380' ).
Diese Schreibweise spart Code und vermeidet unnötige Zwischenschritte.
REDUCE – Aggregationen in einer einzigen Anweisung
Der REDUCE-Operator eignet sich hervorragend für Berechnungen, die sonst eine Schleife benötigen würden.
Beispiel: Summe mit REDUCE
Vorher wurde eine Summe über eine Tabelle mit einer Schleife gebildet:
DATA: lt_numbers TYPE TABLE OF i VALUE #( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ),
lv_sum TYPE i.
LOOP AT lt_numbers INTO DATA(lv_num).
lv_sum = lv_sum + lv_num.
ENDLOOP.
Mit REDUCE kann die gesamte Berechnung in einer einzigen Anweisung erfolgen:
DATA(lv_sum) = REDUCE i( INIT result = 0
FOR num IN lt_numbers
NEXT result = result + num ).
Hier wird result initial auf 0 gesetzt und mit jedem Element aus lt_numbers summiert.
Beispiel: Minimum-Wert bestimmen
Der kleinste Wert in einer internen Tabelle kann mit REDUCE ermittelt werden:
DATA(lv_min) = REDUCE i( INIT min = lt_numbers[ 1 ]
FOR num IN lt_numbers
NEXT min = COND i( WHEN num < min THEN num ELSE min ) ).
Statt einer separaten Schleife wird direkt der kleinste Wert berechnet.
Kombinationen aus FOR, VALUE, NEW und REDUCE
Die wahre Stärke dieser Operatoren zeigt sich in Kombinationen:
Beispiel: Liste von Quadratzahlen
DATA(lt_squares) = VALUE i_table( FOR num = 1 UNTIL num > 10 ( num * num ) ).
Hier wird eine Tabelle mit den Quadraten der Zahlen von 1 bis 10 in einer einzigen Zeile erzeugt.
Beispiel: Summenberechnung innerhalb einer FOR-Schleife
DATA(lv_total) = REDUCE i( INIT sum = 0
FOR num = 1 UNTIL num > 10
NEXT sum = sum + num * num ).
Diese Anweisung berechnet die Summe aller Quadratzahlen von 1 bis 10 und zeigt, wie FOR und REDUCE zusammenarbeiten können.
Zusammenfassung
Die neuen ABAP-Operatoren FOR, VALUE, NEW und b ermöglichen es Entwicklern, Code effizienter und lesbarer zu gestalten. Sie bieten eine leistungsfähige Alternative zu klassischen Schleifen und ermöglichen es, komplexe Berechnungen in einer einzigen Anweisung durchzuführen.
Vorteile der modernen ABAP-Syntax:
- Kompakter Code: Weniger Zeilen und weniger manuelle Zuweisungen
- Bessere Lesbarkeit: Verständlichere und wartungsfreundlichere Anweisungen
- Effizientere Verarbeitung: Reduktion von Schleifen und expliziten Speicheroperationen
Falls Sie Unterstützung bei der Migration und Modernisierung bestehender ABAP-Codebasen benötigen, stehen wir Ihnen mit unserer langjährigen Erfahrung zur Seite. Die CloudDNA GmbH unterstützt Unternehmen bei der Umstellung auf moderne ABAP-Techniken und der Optimierung von bestehenden Anwendungen. Sprechen Sie uns gerne an, um Ihre Anforderungen zu besprechen.