Pass by Value, Pass by Reference 이해하기

1. Pass by reference for USING parameters 

 For the formal parameters p1 p2 …, no local data object is created in the subroutine. Instead, when it is called, a reference is passed to the specified actual parameter. A change to the formal parameter in the subroutine also changes the value of the actual parameter. 

 – Local Data Object Value가 바뀌면 Actual Parameter Value도 바뀜.

2. Pass by reference for CHANGING parameters 

 The formal parameters p1 p2 … are handled exactly like those parameters defined for pass by reference using USING. 

 – Pass by reference for USING과 동일함.

3. Pass by value for USING parameters 

For each formal parameter p1 p2 …, a local object with the same data type as the corresponding actual parameter is created in the subroutine and filled with its values. A change to the formal parameter in the subroutine does not change the value of the actual parameter. The actual parameter also retains its original value even after the subroutine has ended. 

 – Local Data Object Value가 바뀌어도 Actual Parameter Value는 바뀌지 않음.

4. Pass by value for CHANGING parameters 

 For each formal parameter p1 p2 …, a local data object with the same data type as the corresponding actual parameter is created in the subroutine and filled with its values. A change to the formal parameter in the subroutine does not directly change the value of the actual parameter. If the subroutine is ended using ENDFORM, RETURN, CHECK or EXIT however, the content of the formal parameter is assigned to the actual parameter. If the subroutine is ended by a message or an exception, the actual parameter remains unchanged. 

 – Local Data Object Value가 바뀌어도 Actual Parameter Value는 바뀌지 않음 (단, 정상적으로 종료가 되면 바뀜)



[#M_테스트 소스코드|접기|

DATA: f1 VALUE ‘A’,

      f2 VALUE ‘B’.

DATA: f3 VALUE ‘C’,

      f4 VALUE ‘D’.

WRITE: / f1, f2.

PERFORM s1 USING f1

        CHANGING f2.

WRITE: / f1, f2.

WRITE: / f3, f4.

PERFORM s2 USING f3

        CHANGING f4.

WRITE: / f3, f4.

*&———————————————————————*

*&      Form  s1

*&———————————————————————*

*       text

*———————————————————————-*

*      –>P1         text

*      –>P2         text

*———————————————————————-*

FORM s1 USING p1

     CHANGING p2.

  p1 = p2 = ‘X’.

ENDFORM.                    “s1

*&———————————————————————*

*&      Form  s2

*&———————————————————————*

*       text

*———————————————————————-*

*      –>P1         text

*      –>P2         text

*———————————————————————-*

FORM s2 USING VALUE(p1)

     CHANGING VALUE(p2).

  p1 = p2 = ‘X’.

ENDFORM.                    “s2

_M#]