GUIDELINE 6.22
Pass by Reference of Global Data
ABAP_BACKGROUND
In a local context you can normally directly access the
data objects of superordinate more
global contexts. For example, in a method, you can have write access to
the attributes of the specific class and to the potential global data of
the current program.
Therefore, if a more global data object is passed to a procedure by
reference, access is granted there both through its name and the formal
parameter.
ABAP_RULE
Do Not Pass Global Data to Local Contexts by Reference
Do not use global data as actual parameters for formal parameters of
procedures if you can change them in the procedure in another way, and
the parameter is passed by reference.
ABAP_DETAILS
If a global data object that has also been passed by reference is
changed in a procedure ( method
), this also changes the formal parameter and vice versa. This behavior
is not usually anticipated when writing the procedure.
Global data is only supposed to be transferred to formal parameters for
which pass by value is
declared, or to procedures that are guaranteed not to have any unwanted
consequences for this data.
Bad example
After the do_something method has been called in the main
method in the following source code, the attr attribute contains
the unexpected value 2.0 , because the first assignment to the
c_value changing parameter, which has been passed by reference,
also changes attr .
CLASS class DEFINITION.
PUBLIC SECTION.
METHODS
main.
PRIVATE SECTION.
DATA
attr TYPE p DECIMALS 2.
METHODS
do_something CHANGING c_value TYPE numeric.
ENDCLASS.
CLASS class IMPLEMENTATION.
METHOD main.
attr = '1.23'.
do_something( CHANGING c_value = attr ).
ENDMETHOD.
METHOD do_something.
...
c_value = floor( attr ).
...
c_value = c_value + attr.
...
ENDMETHOD.
ENDCLASS.
Good example
If the pass by reference method in the method declaration of
do_something in the above example is converted into a pass by value
method, as shown in the following source code, the attr attribute
contains the expected value 2.23 after the method has been
called.
...
METHODS
do_something CHANGING VALUE(c_value) TYPE numeric.
...
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved