ABAP-實參,形參,引用傳遞,值傳遞


        當過程(指的是方法,函數,子例程)被調用的時候,實參要被傳遞到形參,傳遞的方法有引用傳遞(pass by reference)值傳遞(pass by value)兩種,這兩種方式是在過程的參數接口中定義的,對於引用傳遞來說,沒有將本地數據對象傳遞給參數,而是將一個對實參的引用傳遞給過程,所以在過程中被引用的參數是不允許改變的(也就是說傳遞的是實際數據對象的地址,不同的地址對應得是不同的數據對象);但是對於值傳遞來說,會產生一個數據對象的副本,輸出參數和返回值在過程調用的時候會被初始化,而值傳遞更適合魯棒性和數據一致性很重要的場景

 
        在實際應用中當決定形參使用引用傳遞還是值傳遞的時候,主要是基於每種傳輸類型的性能和魯棒性來考慮的,在ABAP中,引用傳遞總是會有更高的性能,這是由於當過程被調用的時候沒有本地的數據對象被存儲也沒有數據傳輸,因此,出於性能的原因引用傳遞更合適。
 
  •  對於引用傳遞來說,輸出參數實際上扮演着輸入/輸出參數的角色。
    例如:函數實現如下
FUNCTION ZFM_PASS_TEST.
    CONCATENATE o_b ' 123' into o_b.
ENDFUNCTION.
    調用代碼
DATA b(10) TYPE c.
b = 'BEF'.
CALL FUNCTION 'ZFM_PASS_TEST'
  IMPORTING
    o_b = b.
WRITE b.

當輸出參數設置為引用傳遞:

輸出結果:BEF  123
當輸出參數設置為值傳遞時:
輸出結果: 123
  • 如果過程因為錯誤停止(也就是,由於程序RETURN,EXIT,CHECK后停止),通過引用傳遞的實參會保留被形參傳遞的值,而在值傳遞,當過程停止沒有值被傳遞到實參。
修改函數代碼:
FUNCTION ZFM_PASS_TEST.
  return.
  CONCATENATE o_b ' 123' into o_b.
ENDFUNCTION.
在引用傳遞情況下結果為空,此時改變了實參的值,而值傳遞情況下執行結果為BEF,並沒有改變實參的值。
 
  • 形參(formal parameter):根據他們的類型指定,他們可以像過程中的數據對象一樣的方式使用,形參是過程簽名的實質部分,既可以是位置參數(positional parameters)(對於子例程)或者關鍵字參數(keyword parameters)(對於methods和function modules)。
  • 實參(actual parametes):是一種數據對象,他的內容作為參數傳遞給形參,或者是當過程被調用的時候從這個形參中取到的內容就是實參,也可以傳遞功能方法或者計算表達式作為實參進行參數傳。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM