当前位置: 首页 > news >正文

SAP之ABAP吐槽

工作快一年了,误打误撞一头扎进SAP,用起了以前从未听过的abap语言.

abap语言就是在黑客与画家中被Paul Graham极力挖苦的cobol语言的后代.当初看到add 1 to counter.也是被极度震惊了,现在则更多的是麻木,因为abap语言中弱智的语法太多了.最近的项目就是扫描abap源代码,更是见识了底层的那令人震惊的语法.我在想,abap我都能用的很好,还有什么语言可以难到我?!

这里附上一段刚入门abap时写的吐槽,事实证明我当时的吐槽是对的:

##ABAP吐槽!!! 学了一段时间的ABAP语法,真是对ABAP很多的语法设计无力吐槽, 今天实在忍不住了,我要吐槽!!! ABAP的语法肯定是一个庞大团队设计的,很多地方混乱/臃肿/不明所以,和我学过其他的语言如C/C++/Java/Python/VB相比,语法真是一坨屎!!!有意思的是我列举的其他语言都是一个或几个人设计的,而ABAP,肯定是一个团队设计的.我估算ABAP基本语法是一个团队,屏幕逻辑流语法是一个团队,ABAP Object是一个团队,加上人员更迭,规范不严才导致现在这些显而易见的问题. ###ABAP的混乱 Function和Method的参数是极好的例子,简直非人类.import/export/importing/exporting/exception/exceptions,关键字真尼玛多啊! BUT! 不要看import就是import喔,它也可能是export,定义函数是import就是'import',调用时呢,importing就是'export'.意义相反噢,不要搞错了.从这一处的混乱可以大致猜测定义Function和调用Function的语法是由两拨人发明的,都是从自己的角度考虑问题.碰到关键字动词要考虑ing,碰到名称要考虑加不加s,真是痛苦,感觉自己不是在编程,而是在复习英语. ABAP语法和屏幕逻辑流语法不兼容也是一个鲜活的例子.逻辑流常用的process有PBO和PAI,在PBO或PAI里调用module达到模块化的目的.调用module的是屏幕逻辑流语法,定义实现module用ABAP语法. 还有空格问题也比较混乱,不记住基本都会用错,小括号两侧要不要加空格,减号-两侧要不要加空格都是有讲究的.具体就不细说了,严重影响篇幅. ###ABAP的臃肿 ABAP语法中很少用到中括号或大括号(或者说没有用到?我是没见过),所以一个语法块的开始与结束就需要用end喽.而一个事件块的结束又没有end喔,当心了. 关键字暴多!ABAP的语法离了关键字完全没法活啊,极难找到哪条语句里面没有关键字啊(看了标准教程得知每条语句第一个单词必为关键字!),这些关键字还大写,还特么没有简写, 读起来用起来暴费劲! 最尼玛关键的是ABAP自带的旧版编辑器竟然没有关键字提示,不得不一个个手输啊,关键字definition/inheriting/implementation可真够长的!新版编辑器倒是提供关键字提示功能了. 可是! 可是! 用新版编辑器打开旧版编辑器创建的代码, 竟然乱码!!我靠,第一次碰到英文也乱码,public能给你整成pu /n blic,CLASS能格式化为cl /n ass,唉, 无力吐槽, 这是不是同一家公司的产品?!?! 整体语法太依赖关键字,入门虽简单但是熟悉了后会觉得很繁琐.举个栗子: 调用对象中的函数不是go_obj->create(),而是CALL METHOD go_obj->create,可是又有CALL METHOD go_obj->create(f)这样的用法,既混乱又臃肿. 在面向过程的ABAP中到处都是全局变量,为了区分所有变量的范围,在变量命名时不得人工添加gt_gs_lt_ls_gv_lv_这些前缀以增加代码可读性. ###ABAP的不明所以 缩写没有规范.我是没感觉到有什么规律,大部分都只能碰到一个查一下再记住,没有什么特别的缩写规律.比如说DDIC是Data Dictionary的缩写,ALV是ABAP List Viewer的缩写,tab一般是table的缩写,ref是reference的缩写.PF-status这个缩写我一直都不知道全称是什么,苦恼. 还有slis,slvc,lvc,cl,kkb什么的,都是不知全称的. 合写就更混乱了,table name可能合写为table_name/tabname/tablename,field catalog可能合写为fieldcatalog/fieldcat. 这些混乱的用法就导致碰到一个没见过的词时经常不明所以,搞不定确切含义.同时在使用没用过的功能时不能按规律的猜测,必须翻看文档,否则极易用错.

转载于:https://juejin.im/post/5a684e5ef265da3e243bb0b0

相关文章:

  • centos6.8 安装Python2.7后, yum出现“No module named yum”错误
  • 业界丨李飞飞达沃斯论坛直击,与美国银行、埃森哲CTO圆桌聊AI应用
  • SQLServer 进程无法向表进行大容量复制(错误号: 22018 20253)
  • 读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技术(125)
  • [20180129]bash显示path环境变量.txt
  • 使用zabbix 监控nginx cache的缓存命中率(openresty版)
  • 栈实现走出迷宫(C++)
  • Vue | 一个支持数据抓取的JSON树组件
  • css + css3技术总结报告
  • JDK1.8环境下依然报错 Unsupported major.minor version 52.0
  • 在SpringBoot中使用FluentValidator验证插件
  • Nginx学习之开启Gzip压缩提升页面加载速度
  • 10.系统设计
  • Vue实现简单选项卡
  • Bzoj4872: [Shoi2017]分手是祝愿
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • “大数据应用场景”之隔壁老王(连载四)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java应用性能调优
  • jquery ajax学习笔记
  • js如何打印object对象
  • JS数组方法汇总
  • Linux gpio口使用方法
  • python 装饰器(一)
  • SSH 免密登录
  • 服务器之间,相同帐号,实现免密钥登录
  • 给第三方使用接口的 URL 签名实现
  • 微信小程序设置上一页数据
  • 一、python与pycharm的安装
  • 带你开发类似Pokemon Go的AR游戏
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (C语言)fgets与fputs函数详解
  • (笔试题)分解质因式
  • (六)Hibernate的二级缓存
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .md即markdown文件的基本常用编写语法
  • .Net MVC + EF搭建学生管理系统
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 使用反射注册事件
  • /etc/sudoers (root权限管理)
  • /run/containerd/containerd.sock connect: connection refused
  • ::前边啥也没有
  • [20150707]外部表与rowid.txt
  • [2016.7 day.5] T2
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [Android]How to use FFmpeg to decode Android f...
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [BT]BUUCTF刷题第8天(3.26)
  • [DAX] MAX函数 | MAXX函数
  • [GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练