SAP NetWeaver AS ABAP Release 752, ©Copyright 2017 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Programmierrichtlinien → ABAP-spezifische Grundregeln →Modernes ABAP
Hintergrund
ABAP ist eine lebendige Programmiersprache, die kontinuierlich weiterentwickelt wird. Seit der Einführung von ABAP vor etwa 30 Jahren entstehen laufend neue ABAP-Programme, während parallel dazu an der Sprache ABAP selbst gearbeitet wird. Weiterentwicklungen an der Sprache ABAP sind entweder Erweiterungen der vorhandenen Spracheigenschaften, um neue Funktionalität einzuführen, oder der Ersatz vorhandener Funktionalität durch fortgeschrittenere Konzepte. Der Ersatz vorhandener durch neue Sprachelemente macht die vorhandenen in der Regel überflüssig bzw. obsolet. Das prominenteste Beispiel einer Weiterentwicklung der Sprache ABAP ist nach wie vor die Einführung von ABAP Objects.
SAP hat sich bezüglich der Sprache ABAP einer Politik der strikten Abwärtskompatibilität verschrieben. Das bedeutet zum einen, dass ein beispielsweise zu Release 3.0 geschriebenes ABAP-Programm auf einem AS ABAP in Release 7.0 oder höher unverändert ausgeführt werden kann, zumindest solange es sich um ein Nicht-Unicode-System handelt. Auf der anderen Seite bedeutet es aber auch:
Um diesen Problemen abzuhelfen, gibt es folgende einfache Regel.
Regel
Keine obsoleten Sprachmittel verwenden
Verwenden Sie für Neuentwicklungen keine obsoleten Sprachmittel. Auch für bestehende Programme wird eine inkrementelle Umstellung auf neuere Konzepte empfohlen, wie sie zur Verfügung stehen.
Details
Neuere Sprachelemente sind immer die besseren Sprachelemente. Obsolete Sprachmittel werden nur aus Gründen der Abwärtskompatibilität weiterhin angeboten. Eine Anweisung oder ein Anweisungszusatz wird erst dann für obsolet erklärt, wenn eine leistungsfähigere Alternative existiert oder das Sprachelement als fehlerträchtig (in dem Sinne, dass es zu unsicherer und nicht robuster Programmierung einlädt) erkannt wurde. Aus diesem Grund ist eine sichere und robuste Programmierung nicht mit dem Einsatz obsoleter Sprachelemente zu vereinbaren. Damit verbietet sich die Verwendung solcher obsoleter Sprachmittel im Rahmen der Neuentwicklung.
Bei der Verwendung von ABAP Objects ist ein Großteil der obsoleten Anweisungen und Zusätze bereits syntaktisch verboten. Unter anderem aus diesem Grund wird die Verwendung von ABAP Objects unbedingt empfohlen. Außerhalb von ABAP Objects, das heißt in den Fällen, die noch erlaubt sind, muss selbst Sorge dafür getragen werden, dass keine obsoleten Sprachelemente zum Einsatz kommen. Hierfür liefert Obsolete Sprachelemente eine Übersicht der obsoleten Anweisungen und Anweisungszusätze.
Schlechtes Beispiel
Folgender Quelltext zeigt die Lösung einer Aufgabe unter Verwendung obsoleter Sprachmittel. Eine Prozedur soll in einem Text text alle Vorkommen einer Unterfolge substring durch eine neue Zeichenfolge new ersetzen, falls die Unterfolge nicht am Ende eines Wortes steht.
In obigem Quelltext sind, abgesehen von der Modularisierung mit FORM - ENDFORM, die Anweisung SEARCH und die verwendete Variante von REPLACE obsolet. Darüber hinaus steht ein Zeichenkettenoperator && als Ersatz für CONCATENATE zur Verfügung.
Gutes Beispiel
Folgender Quelltext führt die gleiche Aufgabe wie obiger Quelltext unter Verwendung der neuesten zur Verfügung stehenden Sprachelemente aus.
Das Unterprogramm wird durch eine Methode ersetzt. Durch Verwendung von FIND in Zusammenhang mit einem regulären Ausdruck, der über den Zeichenkettenoperator && zusammengesetzt wird, ist keine Hilfsvariable mehr nötig. Die WHILE-Schleife wird durch REPLACE ALL OCCURRENCES ersetzt, wobei eine weitere Hilfsvariable entfällt und der Kontrollfluss in die ABAP-Laufzeitumgebung verschoben wird. Letzteres erhöht die Ausführungsgeschwindigkeit und ist auch zur Beschränkung der maximalen Schachtelungstiefe hilfreich.
Anmerkung
Im Zusammenhang mit obiger Regel stellt sich die Frage, wie es mit der Koexistenz alter und neuer Konzepte innerhalb einer Programmeinheit aussieht. Es gibt nur eine Stelle, an der dies syntaktisch klar geregelt ist, nämlich die Verwendung des klassischen und des klassenbasierten Ausnahmekonzept in Verarbeitungsblöcken. Anderenfalls können obsolete Sprachelemente in einem Programmteil direkt neben neuen Sprachelementen stehen. Unsere Empfehlung hierzu ist, die Verwendung innerhalb eines Kontextes möglichst einheitlich zu gestalten, das heißt nicht verschiedene Anweisungen, wie zum Beispiel FIND und SEARCH, nebeneinander zum gleichen Zweck einzusetzen.
Dies soll aber nicht bedeuten, dass bei Erweiterungen an bestehenden Prozeduren aus Gründen der Einheitlichkeit weiterhin obsolete Sprachelemente verwendet werden sollen, nur weil sie dort bereits vorhanden sind. Vielmehr sollte man die Gelegenheit ergreifen und gleich die gesamte Prozedur auf die entsprechenden neuen Sprachelemente umstellen. Durch die Abdeckung der zu ändernden Prozeduren mit Modultests kann sichergestellt werden, dass es bei einer solchen Umstellung nicht zu Überraschungen kommt.