博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用新语法写更简洁的ABAP代码
阅读量:2035 次
发布时间:2019-04-28

本文共 2366 字,大约阅读时间需要 7 分钟。

相比其他语言,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可以获取一个工作区

  • 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(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)的代码总是永远的追求,谨以此文与各位共勉。

你可能感兴趣的文章
【托业】【跨栏】TEST05
查看>>
【托业】【全真题库】TEST1-语法题+阅读题
查看>>
【托业】【全真题库】TEST3-语法题+阅读题
查看>>
【托业】【跨栏】TEST06
查看>>
【托业】320题-语法题(03-04)(03-37、04-11)
查看>>
【日语】五十音图-一个好用的日语五十音图记忆方法
查看>>
linux下使用crontab实现定时PHP计划任务失败的原因分析
查看>>
linux环境下安装redis扩展
查看>>
一个简单大方的赞后+1,踩后-1js动画效果
查看>>
新手学习编程的最佳方式
查看>>
从json_encode过来的的字符串被返回到html页面时的解析
查看>>
linux虚拟机局域网网卡配置
查看>>
用js判断是否为手机浏览,如果是手机浏览就跳转到手机站
查看>>
每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)
查看>>
定时启动计划任务(转载自网络)
查看>>
Javascript的RegExp对象(转载自网络)
查看>>
rwx对于文件和目录的意义
查看>>
借助csv用PHP生成excel文件
查看>>
使用SimpleXML解析xml文件数据
查看>>
php读取excel文档内容(转载)
查看>>