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.

FORM bad_example USING    substring TYPE csequence
                          new       TYPE csequence
                 CHANGING text      TYPE csequence.
  DATA: pattern TYPE string,
        subrc   TYPE sy-subrc.
  CONCATENATE '*' substring INTO pattern.
  SEARCH text FOR pattern.
  IF sy-subrc <> 0.
    CLEAR subrc.
    WHILE subrc = 0.
      REPLACE substring WITH new INTO text.
      subrc = sy-subrc.
    ENDWHILE.
  ENDIF.
ENDFORM.

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.

METHOD good_example.
  FIND REGEX substring && `\b` IN text.
  IF sy-subrc <> 0.
    REPLACE ALL OCCURRENCES OF substring IN text WITH new.
  ENDIF.
ENDMETHOD.

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.