Ansicht
Dokumentation

ABENDECLARATION_INLINE_GUIDL - DECLARATION INLINE GUIDL

ABENDECLARATION_INLINE_GUIDL - DECLARATION INLINE GUIDL

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Inline-Deklarationen

Inline-Deklarationen können mit den Deklarationsoperatoren

an Schreibpositionen vorgenommen werden. Sie nehmen somit Deklarationen in operationalen Anweisungen statt in Deklarationsanweisungen vor. Die Deklaration erfolgt beim Kompilieren des Programms und unabhängig davon, ob die Anweisung tatsächlich ausgeführt wird.

Inline-Deklarationen nur lokal verwenden

Nehmen Sie Inline-Deklarationen nur in Verarbeitungsblöcken vor, die lokale Daten unterstützen. Verwenden Sie sie so, als wären sie lokal im aktuellen Anweisungsblock. Für inline deklarierte Variablen, die im aktuellen Kontext nur einmal geschrieben werden, wird FINAL(var) gegenüber DATA(var) bevorzugt.

Inline-Deklarationen sind, wenn richtig eingesetzt, ein ausgezeichnetes Mittel, um Programme schlanker und lesbarer zu machen. Eine Inline-Deklaration in einer Anweisung wirkt wie eine Kurzschreibweise für eine Deklarationsanweisung direkt vor der Anweisung. Deshalb müssen auch die Richtlinien für Deklarationsanweisungen beachtet werden:

  • Die Regel, keine programmglobalen Variablen und Feldsymbole zu deklarieren, gilt uneingeschränkt auch für Inline-Deklarationen. Aus diesem Grund sollen Anweisungen mit Inline-Deklarationen nur in Verarbeitungsblöcken mit lokalen Daten, also in Prozeduren und dabei wieder bevorzugt in Methoden, aufgeführt werden. Ansonsten wären die inline deklarierten Variablen und Feldsymbole programmglobal, mit allen bei der Regel geschilderten Nachteilen.
  • Inline-Deklarationen stellen eine Ausnahme von der Regel dar, lokale Deklarationen nur am Anfang einer Prozedur vorzunehmen. Da sie in operationalen Anweisungen aufgeführt werden, können sie naturgemäß nicht wie Deklarationsanweisungen am Anfang der Prozedur aufgeführt werden. Dennoch behalten auch bei Inline-Deklarationen die bei der Regel zu lokalen Deklarationen aufgeführten Einschränkungen ihre Gültigkeit. Insbesondere ist auch die Gültigkeit von Inline-Deklarationen nicht auf ihren aktuellen Anweisungsblock beschränkt. Aus diesem Grund sollten Inline-Deklarationen nur in überschaubaren Prozeduren aufgeführt werden, wo sie die Lesbarkeit tatsächlich steigern. Die inline deklarierten Variablen und Feldsymbole sollten nur in unmittelbarer Nähe zu ihrer Deklaration verwendet werden. Keinesfalls sollte vor der Deklaration dynamisch auf eine inline deklarierte Variable zugegriffen werden. Wenn eine Inline-Deklaration in einer (bedingten) Kontrollstruktur aufgeführt wird, sollte in der Regel auch nur innerhalb dieses Anweisungsblocks auf sie zugegriffen werden.
  • Die Verwendung von FINAL(var) anstelle von DATA(var) wenn möglich, kann die Robustheit eines Programms verbessern.

Inline-Deklarationen eines Feldsymbols pattern> und zweier Variablen moff und mlen in einer LOOP-Schleife und ihre spätere Wiederverwendung in einer anderen Schleife. Die Deklarationen erwecken zwar den Anschein nur in der ersten Schleife und nur bedingt gültig zu sein, sie gelten aber unbedingt und für die ganze Methode.

METHOD demo_method.
  "IMPORTING i_tab1 TYPE TANDARD TABLE OF string
  "IMPORTING i_tab2 TYPE TANDARD TABLE OF string
  "IMPORTING i_text TYPE string

  IF i_tab1 IS NOT INITIAL.
    LOOP AT i_tab1 ASSIGNING FIELD-SYMBOL(pattern>).
      FIND pattern> IN i_text MATCH OFFSET DATA(moff)
                               MATCH LENGTH DATA(mlen).
      ...
    ENDLOOP.
  ENDIF.

  IF i_tab2 IS NOT INITIAL.
    LOOP AT i_tab2 ASSIGNING pattern>.
      FIND pattern> IN i_text MATCH OFFSET moff
                               MATCH LENGTH mlen.
      ...
    ENDLOOP.
  ENDIF.

ENDMETHOD.

Die inline deklarierten Feldsymbole und Variablen werden nur lokal in den entsprechenden Schleifen verwendet. Ihre Gültigkeit in der gesamten Methode wird zugunsten der Lesbarkeit nicht ausgenutzt. Wenn das Feldsymbol und die Variablen nur einmal für beide Schleifen deklariert werden sollen, sollten sie mit Deklarationsanweisungen am Anfang der Methode deklariert werden.

METHOD demo_method.
  "IMPORTING i_tab1 TYPE TANDARD TABLE OF string
  "IMPORTING i_tab2 TYPE TANDARD TABLE OF string
  "IMPORTING i_text TYPE string

  IF i_tab1 IS NOT INITIAL.
    LOOP AT i_tab1 ASSIGNING FIELD-SYMBOL(pattern1>).
      FIND pattern1> IN i_text MATCH OFFSET DATA(moff1)
                                MATCH LENGTH DATA(mlen1).
      ...
    ENDLOOP.
  ENDIF.

  IF i_tab2 IS NOT INITIAL.
    LOOP AT i_tab2 ASSIGNING FIELD-SYMBOL(pattern2>.
      FIND pattern2> IN i_text MATCH OFFSET DATA(moff2)
                                MATCH LENGTH DATA(mlen2).
      ...
    ENDLOOP.
  ENDIF.

ENDMETHOD.






Addresses (Business Address Services)   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7694 Date: 20240523 Time: 170550     sap01-206 ( 124 ms )