工做快一年了,誤打誤撞一頭扎進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_這些前綴以增長代碼可讀性.codeABAP的不明因此
縮寫沒有規範.我是沒感受到有什麼規律,大部分都只能碰到一個查一下再記住,沒有什麼特別的縮寫規律.好比說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. 這些混亂的用法就致使碰到一個沒見過的詞時常常不明因此,搞不定確切含義.同時在使用沒用過的功能時不能按規律的猜想,必須翻看文檔,不然極易用錯.對象