用新语法写更简洁的ABAP代码
相比其他語言,ABAP可能有很多特有的長處,但簡潔從來就不是它的優點之一。
不像其他語言通過Library提供常用功能,ABAP大量使用內置聲明(Built-In Statement) 來完善自身,這也是為什么其代碼看起來非?!叭唛L(verbose)”的原因。但是ABAP的作者還是有一直作改進的努力。
筆者在一些Infinity開發系統上經常看到對新語法的介紹。?
本文就推薦幾個自己積累的,比較有用的新語法,權當拋磚引玉。希望大家多按F1,會有很多驚喜。
NOTE: 這些Statement不同程度依賴于ABAP運行版本,對于需要做Downport或為客戶提供服務的同學,請謹慎使用。
1.class->method( ):
-
這個大家應該都了解。在這里只是說明一下CALL METHOD已經是不推薦使用的Statement,刨去兼容性的問題不說大家都應該放棄這種調用method的方法。
-
2. DATA(var) or FEILD-SYMBOL(<fs>):
-
這是一種聲明變量的方式,叫做Inline Declaration。想必大家都遇到過類似的情況:需要用一個臨時變量來記錄個什么東西,于是不得不在方法前面插入一條聲明變量。這種做法對于一些只在局部使用的變量來講實在太過麻煩,而且混在許多全局或者比較重要的變量聲明之中,難免混淆視聽。這時使用Inline Declaration就非常合適。
-
舉個栗子:
-
DATA(i) = sy-index. "記錄一個int值
-
DATA(local_obj) = cl_factory()->get_instance(). "獲得一個實例
-
LOOP itab ASSIGNING FIELD-SYMBOL(<fs>). " 在loop中獲取一個臨時的fs用于讀寫,同樣用DATA可以獲取一個工作區
-
DESCRIBETABLEitab LINES DATA(i). "不解釋
-
.......
-
類似的用法還用很多,大家可以多嘗試。需要說明的是,右函數或賦值操作必須能夠提供關于這個返回值的明確類型,否則不能使用這個聲明。其他關于這個聲明的具體信息請猛擊F1。
-
3. itab[ table_expression ]:
-
這是一個可以代替READ TABLE的聲明,非常的簡潔明了。區別是它并不會改變sy-tabix的值。
-
綜合上面的一條提供一個例子:DATA(wa) = itab[ 1 ]. " 取itab第一行放入wa. 不要問我為什么是1不是0.
-
其他用法依然猛擊F1.
-
DATA?:?LT_MARA?LIKE?TABLE?OF?MARA?WITH?HEADER?LINE.
SELECT?*?FROM?MARA?INTO?TABLE?LT_MARA?UP?TO?10?ROWS.
LOOP?AT?LT_MARA?ASSIGNING?FIELD-SYMBOL(<FS>).
??WRITE?:?/?SY-TABIX,<FS>-MATNR.
ENDLOOP.
DATA(WA)?=?LT_MARA[?5?].
WRITE?:?/?.
WRITE?:?/?SY-TABIX,WA-MATNR.
-
-
4. VALUE type( ... ):
-
這里的VALUE是作為操作符(Operator)出現。與第二條總有一點說不清道不明的曖昧關系。
-
下面舉個例子:DATA(wa) = VALUE bseg( bukrs = '0001' butxt = 'any text' ). "產生一個bseg類型的structure, 相應的字段賦予初始值, 然后整個賦給wa
-
更牛逼的還可以配合"#"使用,詳情猛擊F1.
-
DATA?:?LT_MARA?LIKE?TABLE?OF?MARA?WITH?HEADER?LINE.
DATA(WA)?=?VALUE?MARA(?MATNR?=?'3010001001'?MATKL?=?'3010'?).
APPEND?WA?TO?LT_MARA.
WRITE?:?/?WA-MATNR,WA-MATKL.
DESCRIBE?TABLE?LT_MARA?LINES?DATA(I).
WRITE?:?/?I.
-
-
5. |....|:
-
沒錯就是前后兩個 "|",可以用來操作String,用例子說的更明白:
-
DATA(str) = |Hello World!|. " str = 'Hello World!'
-
DATA(str) = | {attr} |. " attr是什么值str就是什么值
-
DATA(str) = | {func( )} |. " func是個方法,返回的string就給了str.
-
更多用法還有操作符"&",沒錯,F1. CONCATENATE并不是唯一的選擇。
-
DATA(STR1)?=?|Good_1|.
WRITE?:?/?STR1.
DATA(STR2)?=?|{?'Good_2'?}|.
WRITE?:?/?STR2.
DATA(STR3)?=?'Good'?&&?'_'?&&?'3'.
WRITE?:?/?STR3.
-
-
6. FOR / LET / SWITCH / COND.......
-
F1王道,保證有驚喜。
-
結語: 不管ABAP的未來如何,其實可以看出ABAP的創造者們還是不斷改進著它。有些改進很贊,有些也很奇葩,試圖追趕主流程序語言的趨勢卻還是感覺越離越遠。今天在E91開發系統上看到了用ABAP寫的2048,掃雷等小游戲,就大量運用了上面提到的這些語法,看著非常嗲。但是運行效果么...有些總歸是沒辦法的事情。不過作為程序員,寫出簡潔優雅可(kan)讀(zhe)性(niu)強(bi)的代碼總是永遠的追求,謹以此文與各位共勉。
總結
以上是生活随笔為你收集整理的用新语法写更简洁的ABAP代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP算术运算函数
- 下一篇: ABAP类的方法