ABAP: Wo ist der ++ Operator?

ABAP verfügt nicht über einen ++ Operator wie C oder Java es tun. Das beste Äquivalent für ++ ist der += Operator, der ab Netweaver 7.54 verfügbar ist. Auf älteren Systemen können Sie das „add“ Kommando verwenden.

Was wir in ABAP erreichen wollen, ist Folgendes: Eine Ganzzahl um 1 erhöhen.

Schauen wir uns zunächst an, wie der Inkrement Operator in C oder Java genau funktioniert. Dann können wir es korrekt in ABAP übersetzen.

Was bedeutet der ++ Operator in C oder in Java?

Wenn du C-Code, der den Inkrement Operator ++ enthält, in ABAP übersetzen möchtest, musst du zuerst genau verstehen, was dieser Operator bedeutet.

Der Inkrement Operator in Java kommt in zwei Varianten vor: Pre-Increment und Post-Increment.

a = i++

bedeutet: nimm den aktuellen Wert von I, kopiere ihn nach a und erhöhe anschließend i um 1. Andererseits bedeutet

a = ++i

nimm zunächst den Wert von I, erhöhe i um 1, und kopiere danach den Wert in die Variable a.

Es gibt zwei Möglichkeiten, sich zu merken, welche Variante was bedeutet:

Der Code wird immer von links nach rechts ausgeführt. Wenn also ++ vor der Variablen steht, wird ++ zuerst ausgeführt, noch vor der Zuweisung.

Der andere Weg ist, sich den alten Witz über die Programmiersprache C++ anzusehen.

new_language = C++;

Das bedeutet: Die neue Sprache macht das, was C macht. Dann erhöhe nur den Namen.

Was mit der neuen Sprache beabsichtigt war, hätte eigentlich ++C heißen sollen.

Die direkte Übersetzung nach ABAP

Da ABAP keinen ++ Operator hat, müssen wir das manuell machen:

" instead of a = i++ use
a = i. 
i = i + 1.

" instead of a = ++i use
i = i + 1.
a = i. 

" instead of a = i-- use
a = i. 
i = i - 1.

" instead of a = --i use
i = i - 1.
a = i. 

Das ist schon alles. Andererseits: wenn der Variablenname lang ist, wie in

myreallylongvariable =  myreallylongvariable  + 1

dann leidet die Lesbarkeit des Codes. Was kann man dann tun?

Die umständliche Methode: „add 1 to“

Es gibt eine alte Syntax, die ABAP von COBOL übernommen hat:

add 1 to myreallylongvariable.

Dies bedeutet zumindest, dass der Leser deines Codes nicht überprüfen muss, ob die linke und rechte Seite identisch sind. Wenn der Variablenname lang ist, ist diese Syntax tatsächlich leichter zu lesen. Aber hübsch ist es nicht.

Der neue += Operator

Echte Erleichterung kommt mit NetWeaver 7.54. Dort kann man schreiben:

a += 1.
a -= 1.
a *= 5.
a /= 2.

Auf älteren Systemen müsstest du einen der anderen Wege benutzen.

Was in ABAP immer noch nicht geht:


Was ABAP auch in Version 7.54 immer noch nicht kann, ist die Inkrementierung/Dekrementierung und die Zuweisung an eine andere Variable in einer Zeile zu kombinieren. Du kannst also immer noch keinen Java-Code in ABAP schreiben, der das hier ermöglicht:

int a=5,i;

i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;

System.out.println(a);
System.out.println(i);


Lies es zweimal oder probiere es aus, und du wirst verstehen, dass diese Funktion von Java eine ist, die du in ABAP nicht wirklich benötigst.

Der neue += Operator sollte ausreichend sein.

Falls dein ABAP-System älter als 7.54 ist, solltest du eine Aktualisierung in Betracht ziehen. Neuere ABAP-Versionen haben eine Reihe von Funktionen, die deinen Code um mehrere Zeilen kürzer machen und trotzdem besser lesbar sind. Du solltest das mit deinem Kunden besprechen. S/4HANA steht sowieso vor der Tür. Also stelle sicher, dass dein System auf dem neuesten Stand ist.

Mehr ABAP-Artikel findest du hier.

heiko

Dipl.-Ing. Heiko Evermann

Vorheriger Artikel