相比其他语言,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(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代码相关推荐

  1. 9个JavaScript小技巧:写出更简洁,高效代码

    JavaScript一直在变化进步着,这儿列举了一些小技巧帮你在2019年写出更简洁,高效的可拓展的代码.下面共列举了9个讲究使用的小技巧来帮助你成为更好的开发者. 1. async / await ...

  2. 怎样写出简洁的css代码??★★★★

    base.css 设置各种默认值: html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquo ...

  3. Net学习日记_ASP.Net_MVC_新语法笔记

    01.新语法 本章中主要讲解.Net框架性语法.开发者可以使用新语法提高编程的效率以及代码的运行效率:其本质都是"语法糖",由编译器在编译时转成原始语法. 1 自动属性 Auto- ...

  4. 语法糖 Syntactic sugar: 复杂代码的等价简洁替代

    语法糖(Syntactic sugar) 在不改变代码所在位置.语法结构的前提下,实现了运行时的等价代码更简洁流畅,代码更语义自然,可读性高 写着爽,看着爽,就像吃了糖,效率高,错误少 例: 最基本的 ...

  5. 用集合return多个值_Python拾珍:用这些功能写出更简洁、更可读或更高效的代码

    本章我会带领大家回顾那些遗漏的地方.Python提供了不少并不是完全必需的功能(不用它们也能写出好代码),但有时候,使用这些功能可以写出更简洁.更可读或者更高效的代码,甚至有时候三者兼得. 19.1 ...

  6. Python拾珍:用这些功能写出更简洁、更可读或更高效的代码

    本章我会带领大家回顾那些遗漏的地方.Python提供了不少并不是完全必需的功能(不用它们也能写出好代码),但有时候,使用这些功能可以写出更简洁.更可读或者更高效的代码,甚至有时候三者兼得. 19.1 ...

  7. python简单代码编写-新手写Python,8招让你的代码更简洁更Pythonic!

    Python是一门非常灵活的语言,很多语法是其他语言不具备的,特别是对于从C.Java等语言转向Python的人来说,很容易按照C.Java等语言的写法来写Python,对于初学者来说,如果对Pyth ...

  8. 还在手写 Getter/Setter 方法吗?Lombok 让你的代码更简洁!

    以下是文章大纲: Lombok 是什么? 官网:https://projectlombok.org/ Lombok 是一个 Java 库,使用 Lombok 可以通过简单的注解帮助我们消除 Java ...

  9. 使用自定义卫语句写出更简洁的代码

    前言 上次,我们介绍了Pitcher,可以帮我们简化卫语句: public User(string name, int age) {Throw.When(string.IsNullOrWhiteSpa ...

最新文章

  1. 2020,国产AI开源框架“亮剑”TensorFlow、PyTorch
  2. 半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架
  3. python csv数据处理_python处理csv数据的方法
  4. 从MVC到前后端分离
  5. spec文件中的 %pre %post %preun %postun
  6. python3之日期和时间(转载)
  7. 前端学习(1520):vue-router嵌套路由
  8. php有哪些开源社区,PHP开源社区
  9. 基于对抗生成网络的滚动轴承故障检测方法
  10. php打印倒立金字塔,编写程序打印*字符形成的等腰三角形倒立金字塔图形 ******* ***** *** *...
  11. php mysql扩展 5.4_编译php5.4及安装后添加扩展
  12. Vue指令之v-show
  13. keeplive+haproxy+nginx
  14. python-制作手机通讯录导入的vcf格式文件,txt格式转vcf格式
  15. oracle imp指定表空间导入,imp导入其它表空间数据库
  16. Win8.1的IE缓存文件夹哪里去了?细说系统安装分区里那些带箭头的文件夹
  17. android高仿苹果计算器,安卓仿苹果计算器(内附完整源码)要点解析.docx
  18. 游戏音效制作的过程中,需要研发公司怎么配合?
  19. CMD控制台光标无法显示
  20. linux下录音识别成文字软件下载,录音转文字分享助手

热门文章

  1. 美团王庆:当老板对指标进行灵魂拷问时,该如何诊断分析?
  2. 震惊!PMCAFF被成功转型!
  3. 有多少用户痛点,你是听回来的,而不是经过深思过后找出来的
  4. 读书笔记 |《推荐系统实践》- 个性化推荐系统总结
  5. PMCAFF | 一个CRM产品大神的产品之路
  6. 【干货】从小米发布会看:雷军的七个产品思维
  7. 数据结构——Java Stack 类
  8. java中读取Excel表格中的数据
  9. 超级Wi-Fi未来潜力不容小觑 有望带动无线地区型网路发展
  10. 移动网络安全不容忽视 对恶意程序打好防范补丁