Jerry进入SAP成都研究院前,一直是用C/C++开发,所以刚接触ABAP,对于她在某些语法环境下大小写敏感,某些环境下不敏感的特性很不适应。那时候Jerry深深地怀念之前在C/C++编程时遵循的驼峰命名法和匈牙利命名法。


驼峰命名法:函数名中的每一个逻辑断点都有一个大写字母来标记。方法和变量名的首字母一般小写,这叫小驼峰命名法,例如printEmployeePaychecks. 类名的首字母一般大写,这叫大驼峰命名法,比如EmployeeBonusPlanManager.

匈牙利命名法: 变量名= 类型 + 描述。类型一般以一个或多个小写字母开头作为前缀,后面跟着一个或多个单词描述该变量的用途。

Jerry上大学的时候,用的C/C++教程里的示例代码全部采取的匈牙利命令法。

这两种命名方式各有优缺点,网上有很多文章阐述,大家感兴趣的话自行查阅。

那么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的缩写, 说明这个变量是一个局部内表变量。

通常情况下我们期望ABAP里的变量名都统一用小写,为此只需在SAP GUI的ABAP Editor设置里,打开Pretty Printer配置页面,将Keyword Uppercase的勾打上。

这样我们在使用IDE里提供的Pretty Printer,即代码美化功能时,即使ABAP变量里出现了大小写混杂的情况,也会全部自动转换为小写。

然而Pretty Printer的这种行为会带来一个小问题,如果代码里访问了某个CDS view,比如例子中的I_Product,因为它不是一个ABAP关键字,所以也会被转换成全部是小写字母的组合:i_product.

当时我们对这个行为有些不满意,因为按照我们内部开发规范,CDS view的首字母和下划线之后的第一个字母必须大写。我们期望的结果是,当Pretty Printer执行后,代码中CDS view的名称仍然是I_Product, 而不是现在的i_product.

后来Jerry想了个办法,即修改Pretty Printer的处理逻辑:如果扫描到代码里出现的单词代表一个CDS view时,让Pretty Printer高抬贵手,不对这个单词进行任何操作。

我把这个方法分享到了SAP社区上:

Bypass CDS view name case conversion in ABAP source code pretty printer

测试结果:红色下划线标注的ABAP变量名被自动格式化成全部小写,而CDS view的名称I_Product仍然保持不变。这正是我们期望的结果。

两年过去了。如今,这个问题已经有了优雅的解决方案:如果想使用驼峰命名法,只需要在ABAP Development Tool里把Keep Camel Case Identifiers前面的勾选上即可。

大家可以比较一下这个勾如果不打上会是什么样的效果:

这意味着偏爱驼峰命名法的ABAP开发人员,如今也可以在IDE的支持下进行ABAP代码编写了。

SAP社区上有ABAP开发人员声称,这是他们盼望了很久的功能:


注意:目前这个功能只在S/4HANA和SAP云平台ABAP编程环境可用。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了的更多相关文章

  1. 蛇形命名法(snake case)驼峰命名法(camel case)字符转换问题

    描述小 Hi 写程序时习惯用蛇形命名法(snake case)为变量起名字,即用下划线将单词连接起来,例如:file_name. line_number.小 Ho 写程序时习惯用驼峰命名法(camel ...

  2. ABAP开发环境语法高亮的那些事儿

    关于SAP ABAP开发环境,Jerry之前写过几篇公众号文章: 那些年我用过的SAP IDE 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧 使用Visual Studio Code ...

  3. C语言中变量名及函数名的命名规则与驼峰命名法

    一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error  ...

  4. SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换

    一.简述 mybatis驼峰式命名规则自动转换: 使用前提:数据库表设计按照规范“字段名中各单词使用下划线"_"划分”: 使用好处:省去mapper.xml文件中繁琐编写表字段列表 ...

  5. SpringBoot 整合 mybatis 开启驼峰命名规则自动转换

    引言 在使用 MyBatis 进行实际项目开发时,如果数据库表字段名与Java 实体类属性名不一致,映射时则需要编写表字段列表与 Java 实体类属性的映射关系,即resultMap,如下: < ...

  6. Dubbo配置注册中心设置application的name使用驼峰命名法存在的隐藏项目启动异常问题

    原创/朱季谦 首先,先提一个建议,在SpringBoot+Dubbo项目中,Dubbo配置注册中心设置的application命名name的值,最好使用xxx-xxx-xxx这样格式的,避免随便使用驼 ...

  7. 使用 Sublime Text 将含下划线的字符串批量替换为驼峰命名法格式的字符串

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/7762984.html For indexing: Convert ...

  8. 解决ASP.NET MVC返回的JsonResult 中 日期类型数据格式问题,和返回的属性名称转为“驼峰命名法”和循环引用问题

    DateTime类型数据格式问题 问题 在使用ASP.NET MVC 在写项目的时候发现,返回给前端的JSON数据,日期类型是 Date(121454578784541) 的格式,需要前端来转换一下才 ...

  9. 关于Pascal(帕斯卡)以及Camel(驼峰)命名法

    小驼峰式命名法(lower camel case): 第一个单字以小写字母开始:第二个单字的首字母大写,例如:firstName.lastName,也被称为Camel命名法. 大驼峰式命名法(uppe ...

随机推荐

  1. centos安装redis 5.0版本的集群

    我在本地VM-Centos里安装5.0.5时安装遇到了些问题,参考了Blog:https://www.cnblogs.com/shawhe/p/9548620.html 顺利安装完成. 安装redis ...

  2. Git push origin dev-rgq-istokenstatus 【dev-rgq-istokenstatus -> dev-rgq-istokenstatus】

    RenGuoQiang@PC-RENGUOQIANG MINGW64 /d/zgg/zgg-crm (dev-rgq-istokenstatus) $ git push origin dev-rgq- ...

  3. Spring cloud微服务安全实战-8-1课程总结

    总结 首先讲了api的安全.安全常见的风险.安全措施.然后我们把简单的api演化成一个这种微服务的架构. 首先讲了在网关上可以做哪些安全的措施.然后讲了如何搭建一个安全中心,也就是认证服务器,包括一些 ...

  4. C++之future和promise

    future和promise的作用是在不同线程之间传递数据.使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问:而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要 ...

  5. h5上拉加载更多

    --------------------------------------------------------------------------例子1 <div class="bo ...

  6. SpringBoot系列教程web篇之如何自定义参数解析器

    title: 190831-SpringBoot系列教程web篇之如何自定义参数解析器 banner: /spring-blog/imgs/190831/logo.jpg tags: 请求参数 cat ...

  7. git stash详解

        应用场景: 1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然 ...

  8. Spring Boot之从Spring Framework装配掌握SpringBoot自动装配

    Spring Framework模式注解 模式注解是一种用于声明在应用中扮演“组件”角色的注解.如 Spring Framework 中的 @Repository 标注在任何类上 ,用于扮演仓储角色的 ...

  9. 记28377系列芯片中Can总线标准帧和扩展帧该怎么设置?

    笔者最近在调试28377系列DSP芯片的can通讯时,遇到一个小问题,百思不得姐~ 起因是这样的,在设计一个多单元并联的系统,所有单元使用can总线进行通讯,当通讯端口,can外设,以及相关通讯协议都 ...

  10. jQuery无缝轮播图思路详解-唯品会

    效果图如上: 需求:图片自动轮播,鼠标移上停止播放,离开恢复播放,箭头切换图片. html代码 <!--轮播图大盒子开始--> <div class="wrap" ...