ABAP方法的exporting型別引數,需要在方法實現最開始顯式初始化麼
# 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麼?
答案是it depends.
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處:
這些issue被categorize成programming guideline violation,不會算作ATC error。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2679519/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【HttpClient】httpclient之post 方法(引數為Map型別)HTTPclient型別
- 函式引數 引數定義函式型別函式型別
- PyTorch常用引數初始化方法詳解PyTorch
- Python 序列型別以及函式引數型別Python型別函式
- Gson通過藉助TypeToken獲取泛型引數的型別的方法泛型型別
- 實現Nest中引數的聯合型別校驗型別
- Python解析引數的三種方法分別是什麼?Python
- 方法(函式)的定義與引數函式
- 三種方法實現:獲取 url 中的引數
- SpringBoot 介面引數解密的實現方法(使用註解)Spring Boot解密
- php函式引用傳遞引數的方法PHP函式
- C++中出現《E0144 "const char *" 型別的值不能用於初始化 "char *" 型別的實體》的錯誤解決方法C++型別
- 【ASP.NET Core】MVC操作方法如何繫結Stream型別的引數ASP.NETMVC型別
- 從建構函式得到引數型別函式型別
- slave_rows_search_algorithms引數hash_scan的實現方法Go
- SpringBoot 引數別名實現Spring Boot
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- 解析型別引數型別
- javascript中對變數型別的判斷方法JavaScript變數型別
- JavaScript判斷變數型別的四種方法JavaScript變數型別
- 行動硬碟引數錯誤怎麼解決?行動硬碟開啟出現引數錯誤的修復方法硬碟
- 【Scala之旅】型別引數型別
- 條款24:若所有引數皆需型別轉換,請為此採用non-member函式型別函式
- win10開始選單樣式怎麼切換 win10開始選單樣式切換的方法Win10
- MVC如何避免控制器方法接收到的值不能被轉換為引數型別MVC型別
- std::packaged_task<返回型別(引數型別)>Package型別
- PHP類方法的型別提示PHP型別
- Linux系統把時間型別值轉換為數值型的方法是什麼?Linux型別
- 可變資料型別不能作為python函式的引數資料型別Python函式
- Go: 指標方法與值方法<->指標型別與值型別Go指標型別
- Java™ 教程(有界型別引數)Java型別
- C++型別引數化C++型別
- mybatis引數型別錯誤MyBatis型別
- 如何實現隱式型別轉換型別
- 全網最適合入門的物件導向程式設計教程:48 Python函式方法與介面-位置引數、預設引數、可變引數和關鍵字引數物件程式設計Python函式
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- 深入瞭解 Java 方法和引數的使用方法Java
- Java的方法可變長引數Java