工作快一年了,誤打誤撞一頭扎進SAP,用起了以前從未聽過的abap語言.
abap語言就是在黑客與畫家中被Paul Graham極力挖苦的cobol語言的后代.當初看到add 1 to counter.也是被極度震驚了,現(xiàn)在則更多的是麻木,因為abap語言中弱智的語法太多了.最近的項目就是掃描abap源代碼,更是見識了底層的那令人震驚的語法.我在想,abap我都能用的很好,還有什么語言可以難到我?!
這里附上一段剛?cè)腴Tabap時寫的吐槽,事實證明我當時的吐槽是對的:
ABAP吐槽!!!
學了一段時間的ABAP語法,真是對ABAP很多的語法設(shè)計無力吐槽, 今天實在忍不住了,我要吐槽!!!
ABAP的語法肯定是一個龐大團隊設(shè)計的,很多地方混亂/臃腫/不明所以,和我學過其他的語言如C/C++/Java/Python/VB相比,語法真是一坨屎!!!有意思的是我列舉的其他語言都是一個或幾個人設(shè)計的,而ABAP,肯定是一個團隊設(shè)計的.我估算ABAP基本語法是一個團隊,屏幕邏輯流語法是一個團隊,ABAP Object是一個團隊,加上人員更迭,規(guī)范不嚴才導致現(xiàn)在這些顯而易見的問題.ABAP的混亂
Function和Method的參數(shù)是極好的例子,簡直非人類.import/export/importing/exporting/exception/exceptions,關(guān)鍵字真尼瑪多啊! BUT! 不要看import就是import喔,它也可能是export,定義函數(shù)是import就是'import',調(diào)用時呢,importing就是'export'.意義相反噢,不要搞錯了.從這一處的混亂可以大致猜測定義Function和調(diào)用Function的語法是由兩撥人發(fā)明的,都是從自己的角度考慮問題.碰到關(guān)鍵字動詞要考慮ing,碰到名稱要考慮加不加s,真是痛苦,感覺自己不是在編程,而是在復習英語.
ABAP語法和屏幕邏輯流語法不兼容也是一個鮮活的例子.邏輯流常用的process有PBO和PAI,在PBO或PAI里調(diào)用module達到模塊化的目的.調(diào)用module的是屏幕邏輯流語法,定義實現(xiàn)module用ABAP語法.
還有空格問題也比較混亂,不記住基本都會用錯,小括號兩側(cè)要不要加空格,減號-兩側(cè)要不要加空格都是有講究的.具體就不細說了,嚴重影響篇幅.ABAP的臃腫
ABAP語法中很少用到中括號或大括號(或者說沒有用到?我是沒見過),所以一個語法塊的開始與結(jié)束就需要用end嘍.而一個事件塊的結(jié)束又沒有end喔,當心了.
關(guān)鍵字暴多!ABAP的語法離了關(guān)鍵字完全沒法活啊,極難找到哪條語句里面沒有關(guān)鍵字啊(看了標準教程得知每條語句第一個單詞必為關(guān)鍵字!),這些關(guān)鍵字還大寫,還特么沒有簡寫, 讀起來用起來暴費勁! 最尼瑪關(guān)鍵的是ABAP自帶的舊版編輯器竟然沒有關(guān)鍵字提示,不得不一個個手輸啊,關(guān)鍵字definition/inheriting/implementation可真夠長的!新版編輯器倒是提供關(guān)鍵字提示功能了. 可是! 可是! 用新版編輯器打開舊版編輯器創(chuàng)建的代碼, 竟然亂碼!!我靠,第一次碰到英文也亂碼,public能給你整成pu /n blic,CLASS能格式化為cl /n ass,唉, 無力吐槽, 這是不是同一家公司的產(chǎn)品?!?!
整體語法太依賴關(guān)鍵字,入門雖簡單但是熟悉了后會覺得很繁瑣.舉個栗子: 調(diào)用對象中的函數(shù)不是go_obj->create(),而是CALL METHOD go_obj->create,可是又有CALL METHOD go_obj->create(f)這樣的用法,既混亂又臃腫.
在面向過程的ABAP中到處都是全局變量,為了區(qū)分所有變量的范圍,在變量命名時不得人工添加gt_gs_lt_ls_gv_lv_這些前綴以增加代碼可讀性.ABAP的不明所以
縮寫沒有規(guī)范.我是沒感覺到有什么規(guī)律,大部分都只能碰到一個查一下再記住,沒有什么特別的縮寫規(guī)律.比如說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. 這些混亂的用法就導致碰到一個沒見過的詞時經(jīng)常不明所以,搞不定確切含義.同時在使用沒用過的功能時不能按規(guī)律的猜測,必須翻看文檔,否則極易用錯.