ABAP方法的exporting型別引數,需要在方法實現最開始顯式初始化麼

i042416發表於2020-03-11

# Sent: Monday, September 23, 2013 10:59 AM

Subject: code review遺留問題: is it necessary to explicitly initialize the exporting parameter within implementation itself

像下圖裡的exporting parameter需要在method 實現最開始時顯式CLEAR麼?

ABAP方法的exporting型別引數,需要在方法實現最開始顯式初始化麼

答案是it depends.

ABAP方法的exporting型別引數,需要在方法實現最開始顯式初始化麼

pass by value checkbox預設未選中,即pass by reference,此時實參的reference直接傳到method 實現裡,修改method裡的形參即直接修改了實參。

如果是pass by value,在runtime進入method執行時,abap runtime自動為輸入和輸出形參建立local object,然後把輸入實參的value copy到local object裡,method裡的計算都儲存在輸出形參的local object裡,method執行結束後再把local object的值copy到輸出實參。

在pass by reference的情況下,exporting引數在進入函式內時不會自動被初始化,而仍然為傳入時實參的值,因此需要developer 自己負責去初始化,否則可能會出現unexpepected的behavior。

什麼時候用pass by reference,什麼時候用pass by value?

Pass by reference效能更好,但需要developer自己在實現裡初始化exporting parameter

如果期望輸出引數僅當method 成功執行之後才返回給caller,用pass by value

如果引數是一個很複雜的structure,比如nested table,或者按照abap help裡面的建議值—超過100bytes後最好用pass by reference。

二者更詳細的區別參考abap help。

Extended check會自動把所有違反規則的code 列出來,比如CL_CRM_SOC_FND_ACCESS_IMPL 有17處:

ABAP方法的exporting型別引數,需要在方法實現最開始顯式初始化麼 ABAP方法的exporting型別引數,需要在方法實現最開始顯式初始化麼

這些issue被categorize成programming guideline violation,不會算作ATC error。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2679519/,如需轉載,請註明出處,否則將追究法律責任。

相關文章