用新语法写更简洁的ABAP代码

来源:互联网 发布:网络销售文人字画 编辑:程序博客网 时间:2024/06/08 09:14

相比其他语言,ABAP可能有很多特有的长处,但简洁从来就不是它的优点之一。

不像其他语言通过Library提供常用功能,ABAP大量使用内置声明(Built-In Statement) 来完善自身,这也是为什么其代码看起来非常“冗长(verbose)”的原因。但是ABAP的作者还是有一直作改进的努力。

笔者在一些Infinity开发系统上经常看到对新语法的介绍。 

本文就推荐几个自己积累的,比较有用的新语法,权当抛砖引玉。希望大家多按F1,会有很多惊喜。

NOTE: 这些Statement不同程度依赖于ABAP运行版本,对于需要做Downport或为客户提供服务的同学,请谨慎使用。


  1. 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可以获取一个工作区

  • DESCRIBETABLEitabLINES 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(WALT_MARA[ ].
    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(WAVALUE MARAMATNR '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)的代码总是永远的追求,谨以此文与各位共勉。

1 0
原创粉丝点击