abap的子程序參數注意點

 

1、參數引用傳遞(Parameters Passed by Reference)
使用USING或CHANGING不帶value關鍵字來聲明參數引用傳遞。代碼樣例:
FORM subr USING    p1 [{TYPE type}|{LIKE field}]
                   p2 [{TYPE type}|{LIKE field}]
                   ...
          CHANGING p1 [{TYPE type}|{LIKE field}]
                   p2 [{TYPE type}|{LIKE field}]
                   ...
在引用傳遞的方式,參數不在堆中佔有內存,傳入的是變量的地址,在子程序中對變量的修改實際上是對實際參數的修改。在這種方式using和changing是等價的。

2、輸入參數傳值傳遞(Input Parameters That Pass Values)
使用USING帶value關鍵字來聲明輸入參數傳值傳遞。代碼樣例:
FORM subr USING    value(p1) [{TYPE type}|{LIKE field}]
                   value(p2) [{TYPE type}|{LIKE field}]
                   ...
在輸入參數傳值傳遞的方式,參數在堆中佔有內存,傳入的是變量的值,在子程序中對變量的修改不會對實際參數的造成修改。

3、輸出參數傳值傳遞(Output Parameters That Pass Values)
使用USING帶value關鍵字來聲明輸入參數傳值傳遞。代碼樣例:
FORM subr CHANGING    value(p1) [{TYPE type}|{LIKE field}]
                   value(p2) [{TYPE type}|{LIKE field}]
                   ...
在輸出參數傳值傳遞的方式,形式參數在堆中佔有內存,傳入的是變量的值,在子程序中對變量的修改只有正常結束 (Endform,CHECK,EXIT等語句結束)時纔會有形式參數拷貝到對實際參數,如果是錯誤消息退出則不會影響實際參數。

***************************其它知識點**************************************************************

ABAP/4中參數的傳遞可分成

1. Call By Reference:

傳參數時將資料的存放地址(address)傳至參數中, 也就是子程序中的參數變量與外部實際

變量共享地址內的值, 又稱爲 Call By Address, 若在子程序中地址中的值改變了, 外部實

際變量的值也會跟着改變.

語法:

     FORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]

     PERFORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]

    Using 之後接在子程序中不會改變的變量, CHANGING接會改變值的變量

     但實際上USING之後的參數在子程序中也可將值改變

     Example:

     SUM = 0.

     NUM1 = 100. NUM2=200.

     PERFORM ADD USING NUM1 NUM2 CHANGING SUM.

     WRITE: / NUM1,NUM2,SUM “ SUM 0 變成 300

     FORM ADD USING NUM1 NUM2 CHANGING SUM.

        SUM = NUM1 + NUM2.

     ENDFORM.

     執行結果:

                     100   200   300

2. Call By Value

傳參數時將數據的值複製一份至另一地址中, 所以在子程序中參數變量值改變, 並不會影

響外部實際變量的值.

     語法:

          FORM <subr> USING VALUE(<f1>…)

          使用 VALUE(<f1>)表示 <f1> Call By Value的傳遞

          PERFORM <subr> USING <f1>

     Example:

     SUM = 0.

     NUM1 = 5.

     PERFORM MULTI USING NUM1 CHANGING SUM.

     WRITE: / NUM1,SUM “NUM1值還是5, SUM 0 變成 120

     FORM MULTI USING VALUE(NUM1) CHANGING SUM.

        SUM = 1.

        WHILE NUM1 > 1

          SUM = SUM * NUM1.

          NUM1 = NUM1 – 1.

        ENDWHILE..

     ENDFORM.

     執行結果:

                     5   120

3. Call By Value and Return Result

傳入參數值的方式同Call By Value, 但在子程序結束執行時會將傳入的參數值複製

一份傳回給外部實際變量.

語法:

        FORM ….. CHANGING VALUE(<f1>)

        PERFORM …. CHANGING …. <f1>

        Example:

               SUM = 0.

               NUM1 = 100. NUM2=200.

               PERFORM ADD USING NUM1 NUM2 CHANGING SUM.

               WRITE: / NUM1,NUM2,SUM “ SUM 0 變成 300

               FORM ADD USING NUM1 NUM2 CHANGING VALUE(S).

                  S = NUM1 + NUM2.

                  WRITE: / NUM1,NUM2,SUM 得到結果爲 100 200 0

               ENDFORM.

     執行結果:

                100    200     0    在子程序中 SUM值尚未改變

                     100   200   300    返回程序時, 將變量 S的值複製給 SUM

                                        所以 SUM值變成 300

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章