ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了
Jerry进入SAP成都研究院前,一直是用C/C++开发,所以刚接触ABAP,对于她在某些语法环境下大小写敏感,某些环境下不敏感的特性很不适应。那时候Jerry深深地怀念之前在C/C++编程时遵循的驼峰命名法和匈牙利命名法。
![](https://user-images.githubusercontent.com/5669954/67611517-a7ac8080-f7cc-11e9-8e0a-07a36262ccee.png)
匈牙利命名法: 变量名= 类型 + 描述。类型一般以一个或多个小写字母开头作为前缀,后面跟着一个或多个单词描述该变量的用途。
Jerry上大学的时候,用的C/C++教程里的示例代码全部采取的匈牙利命令法。
![](https://user-images.githubusercontent.com/5669954/67611518-a7ac8080-f7cc-11e9-8b70-76a05a769b2e.png)
这两种命名方式各有优缺点,网上有很多文章阐述,大家感兴趣的话自行查阅。
那么ABAP呢?在Jerry的文章 SAP官方发布的ABAP编程规范 里能够发现,ABAP的变量命名采取的是一种综合了匈牙利命名法和下划线命名法的混合方式。有的时候,这种命名方式会给ABAP开发人员带来一些烦恼。看一个实际的例子,来自2017年Jerry还在SAP成都研究院CRM开发团队工作时,大家讨论的一个变量命名的问题。
假设有这样一段简单的ABAP代码,通过OPEN SQL从名为I_Product的CDS view里读取数据到内表lt_table里。
ABAP变量名是大小写无关的,下图红色下划线lt_table是一个“匈牙利命名法+下划线命名法”的例子,lt是local table的缩写, 说明这个变量是一个局部内表变量。
![](https://user-images.githubusercontent.com/5669954/67611519-a7ac8080-f7cc-11e9-91b3-93ecaf0ecb0e.png)
通常情况下我们期望ABAP里的变量名都统一用小写,为此只需在SAP GUI的ABAP Editor设置里,打开Pretty Printer配置页面,将Keyword Uppercase的勾打上。
![](https://user-images.githubusercontent.com/5669954/67611520-a8451700-f7cc-11e9-838d-7fff4c19eba0.png)
这样我们在使用IDE里提供的Pretty Printer,即代码美化功能时,即使ABAP变量里出现了大小写混杂的情况,也会全部自动转换为小写。
然而Pretty Printer的这种行为会带来一个小问题,如果代码里访问了某个CDS view,比如例子中的I_Product,因为它不是一个ABAP关键字,所以也会被转换成全部是小写字母的组合:i_product.
![](https://user-images.githubusercontent.com/5669954/67611522-a8451700-f7cc-11e9-946f-3407f14038f9.png)
当时我们对这个行为有些不满意,因为按照我们内部开发规范,CDS view的首字母和下划线之后的第一个字母必须大写。我们期望的结果是,当Pretty Printer执行后,代码中CDS view的名称仍然是I_Product, 而不是现在的i_product.
后来Jerry想了个办法,即修改Pretty Printer的处理逻辑:如果扫描到代码里出现的单词代表一个CDS view时,让Pretty Printer高抬贵手,不对这个单词进行任何操作。
![](https://user-images.githubusercontent.com/5669954/67611523-a8451700-f7cc-11e9-8c01-3513e1b68b05.png)
我把这个方法分享到了SAP社区上:
Bypass CDS view name case conversion in ABAP source code pretty printer
测试结果:红色下划线标注的ABAP变量名被自动格式化成全部小写,而CDS view的名称I_Product仍然保持不变。这正是我们期望的结果。
![](https://user-images.githubusercontent.com/5669954/67611524-a8ddad80-f7cc-11e9-8217-3195276f7dd1.png)
两年过去了。如今,这个问题已经有了优雅的解决方案:如果想使用驼峰命名法,只需要在ABAP Development Tool里把Keep Camel Case Identifiers前面的勾选上即可。
![](https://user-images.githubusercontent.com/5669954/67611525-a8ddad80-f7cc-11e9-8315-3102c8888152.png)
大家可以比较一下这个勾如果不打上会是什么样的效果:
![](https://user-images.githubusercontent.com/5669954/67611526-a8ddad80-f7cc-11e9-8b82-9b7a2945ace1.png)
这意味着偏爱驼峰命名法的ABAP开发人员,如今也可以在IDE的支持下进行ABAP代码编写了。
SAP社区上有ABAP开发人员声称,这是他们盼望了很久的功能:
![](https://user-images.githubusercontent.com/5669954/67611527-aa0eda80-f7cc-11e9-9283-68f82053c2b5.png)
![](https://user-images.githubusercontent.com/5669954/67611516-a713ea00-f7cc-11e9-9243-3db8499a4a2c.png)
注意:目前这个功能只在S/4HANA和SAP云平台ABAP编程环境可用。要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关文章
- eclipse自动提示设置方法和优化(去除空格自动补全)
- jsp延时跳转_js自动跳转到指定页面
- 人才盘点九宫格模型的自动等级线分布
- 超牛逼!这款轻量级 Linux 系统自动安全审计工具真强大
- 小米人形机器人“铁大”学会敲架子鼓;大疆 Mini 3 将上市;4990万美元,巴菲特旗下公司将开发军用自动驾驶车辆……
- 开发Chrome插件,实现网站自动登录
- Windows机器在线扩容系统盘大小后如何批量扩展卷实现多台机器自动扩容C分区
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ③ ( 创建工程目录 | 添加 C++ 源代码 | 代码自动提示 )
- SQL开发知识:SQL Server实现自动循环归档分区数据脚本
- CentOS7网络自动连接详解程序员
- Android实现微信自动抢红包的程序详解手机开发
- iOS 自动循环播放广告控件实现详解手机开发
- iOS自动布局框架之Masonry详解手机开发
- Spring Cloud 入门教程(三): 配置自动刷新详解编程语言
- 程序Linux C编程:开发自动解决问题的帮助程序(linuxc帮助)
- 欧空局正开发自动避免碰撞系统的技术
- Linux自动运维:简化运维繁琐任务(linux自动运维工具)
- Oracle列自动增长:优化存储运行效率(oracle列自动增长)
- MySQL 中自增长:实现自动增长(mysql中自动增长)
- Oracle自动排序简单快捷:让排序更简单(oracle自动排序)
- 的设计Oracle中的自动ID编码让业务设计更有效率(oracle中自动id)
- 点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)