Ansicht
Dokumentation

ABENLITERALS_GUIDL - LITERALS GUIDL

ABENLITERALS_GUIDL - LITERALS GUIDL

rdisp/max_wprun_time - Maximum work process run time   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Literale

Ein Literal ist ein Datenobjekt, das im Quelltext eines Programms durch die zeichenartige Angabe eines Werts definiert wird. Mögliche Literale sind:

  • Zahlenliterale
Folge von Ziffern mit optionalem Vorzeichen. Der Datentyp ist entweder i oder p.
  • Zeichenliterale
  • Textfeldliterale, die in Hochkommata (') eingeschlossen sind. Der Datentyp ist c.

  • String-Literale, die in Backquotes (`) eingeschlossen sind. Der Datentyp ist string.

In Zahlenliteralen sind keine Dezimaltrennzeichen und keine wissenschaftliche Notation mit Mantisse und Exponent möglich. Zur Darstellung solcher numerischer Werte müssen Zeichenliterale mit passendem Inhalt verwendet werden.

Literale an Operandenpositionen vermeiden

Vermeiden Sie die direkte Angabe von Werten im Quelltext über Literale. Stattdessen sollen Konstanten mit diesen Werten deklariert werden. Dies gilt insbesondere für numerische Werte.

Bestimmte Werte werden im Quelltext an mehr als einer Stelle benötigt. Die direkte Angabe dieser Werte im Quelltext ist daher ungünstig, da bei einer Änderung des Wertes mehrere Anweisungen angepasst werden müssten. Durch Einführung einer entsprechenden Konstanten kann der Wert an einer zentralen Stelle im Quelltext angepasst werden. Bei der Deklaration der Konstanten sind Literale natürlich für die Wertangabe erlaubt. Dies kann die Wartung und eine spätere Weiterentwicklung des Programms erheblich erleichtern.

Auch für Werte, die nur an einer Stelle Verwendung finden, ist das Anlegen einer entsprechenden Konstanten vorteilhaft. Durch den Namen der Konstante erhält der Wert eine Semantik, was die Nachvollziehbarkeit des Quelltextes erhöht.

Für Zahlenliterale, die ohne erkennbare semantische Bedeutung im Quelltext auftauchen, hat sich der Begriff "magische Zahlen" etabliert. Diese sollten in ABAP-Programmen vermieden werden. Bei Zeichenliteralen spielt auch die Übersetzungsfähigkeit eine Rolle.

Ausnahme

In bestimmten Situationen kann die Verwendung einer Konstanten jedoch die Lesbarkeit auch beeinträchtigen. Hier ist dann die Angabe eines Literals sinnvoller wie in folgenden Beispielen:

  • CALL FUNCTION 'MY_FUNC'.
  • IF sy-subrc = 0.
  • READ TABLE itab INDEX 1 bzw. itab[ 1 ]
  • ADD 1 TO counter.

In diesen Beispielen ist die semantische Bedeutung der Literale klar zu erkennen, und die Übersetzungsfähigkeit spielt keine Rolle.

Ein weiteres Einsatzgebiet, bei dem Zeichenliterale sinnvoll und umfassend eingesetzt werden dürfen, ist die dynamische Programmierung, in der Teile von Anweisungen oder ganze Programme generiert werden, was ohne Zeichenliterale kaum möglich ist. Mit Zeichenketten-Templates stehen sogar stark erweiterte Möglichkeiten zur Verfügung, um literale Texte zu verwenden.

Hinweis

Wenn Literale verwendet werden, sollte darauf geachtet werden tatsächlich Literale und keine gleichwertigen Ausdrücke zu verwenden:

  • Zahlenliteral +$|-literal statt arithmetischer Ausdruck +$|- literal
  • Textstringliteral `...` statt Zeichenkettenausdruck |...|

Die Ausdrücke werden erst zur Laufzeit ausgewertet und sind damit weniger performant. Nur wenn die Literale ohnehin Teile von Ausdrücken sind, spielt diese Unterscheidung keine Rolle.

Folgender Quelltext zeigt die Angabe der Kreiszahl pi an Operandenpositionen über eine mehrfache Verwendung des gleichen Literals, was das Programm unübersichtlich und anfällig für Schreibfehler macht.

DATA: radius TYPE decfloat34,
      circumference TYPE decfloat34,
      area TYPE decfloat34.
...

circumference =
  2* '3.141592653589793238462643383279503' * radius.
area =
  '3.141592653589793238462643383279503' * radius ** 2.

Folgender Quelltext zeigt die Deklaration einer Konstanten, für die das Literal mit dem Wert pi nur einmal benötigt wird, und deren Verwendung an den entsprechenden Operandenpositionen.

CONSTANTS pi TYPE decfloat34
             VALUE '3.141592653589793238462643383279503'.

DATA: radius        TYPE decfloat34,
      circumference TYPE decfloat34,
      area          TYPE decfloat34.
...
circumference = 2 * pi * radius.
area          = pi * radius ** 2.






ABAP Short Reference   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5884 Date: 20240523 Time: 114948     sap01-206 ( 81 ms )