你見過最爛代碼是什麼?

源於我之前發的帖:吐槽我見過的最爛的代碼,目的不是抨擊和取笑鄙視,我們最終的目的是發現一些我們編碼中的問題並改進(可能自己已經習慣了而發現不 ),歡迎大家吐槽。


這裡只針對spring框架,貼一份我見過最爛的代碼(沒有之一),我就想知道,有沒有其他人能寫出這樣的代碼?還有沒有更加爛的編碼方式??

controller代碼:

/**
* 增加配置
*/
@PostMapping("/add")
public void addConfig(HttpServletRequest request, HttpServletResponse response)
throws IOException {

response.setContentType("application/json;charset=UTF-8");

//返回了一個json格式的字元串。。
String result = configService.add(request);

response.getOutputStream().write(result.getBytes());
response.getOutputStream().flush();
}

services代碼:

/**
* !!!錯誤的示例
*
* @param request
* @return
*/
public String add(HttpServletRequest request) {
Map& data = new HashMap&();

try {
String name = (String) request.getParameter("name");
String value = (String) request.getParameter("value");

//示例代碼
long newID = add(name, value);

data.put("code", 0);
data.put("newID", newID);
} catch (CheckException e) {
// 參數等校驗出錯,已知異常,不需要列印堆棧,返回碼為-1
data.put("code", -1);
data.put("msg", e.getMessage());
} catch (Exception e) {
// 其他未知異常,需要列印堆棧分析用,返回碼為99
logger.error("add config error", e);

data.put("code", 99);
data.put("msg", e.toString());
}

return JSONObject.toJSONString(data);
}

看到這樣的代碼,我第一個反應是震驚,然後是憤怒,最後是悲哀。問了一下開發人員,為什麼這些寫,他說一過來項目組裡面的代碼就是這樣的,繼續追下去原來是一個工作了多年的老開發人員定的代碼框架,我就說嘛,開發新手也寫不出這麼爛的代碼啊。這個寫法還不如在servlet裡面寫呢。可見,開發組長的性能的重要性。

這段代碼有哪些問題,請看:程序員你為什麼這麼累?

歡迎大家吐槽,遇到的各種奇葩代碼。


目前深陷一個火坑中,代碼之爛,令人瞠目結舌,讓人髮指!!!!

1.奇葩的命名方式。一般編碼,命名方式都是英文駝峰法或者下劃線分割。然而該項目命名規範是拼音首字母縮寫。諸如yzjd,mc,tj,sj之類的變數名隨處可見,還幾乎沒注釋。現在告訴各位上述四個變數代表葉子節點,名稱,條件,數據。有沒有砸爛他們狗頭的衝動?此外,本工程中代表著時間,事件的變數也是sj,定項目編碼規範的人,說他是智障都是抬舉他了。

然而,這還不是全部。假設已知yh代表用戶,那各位請猜一猜lstyh代表啥?這個問題曾經困擾了我很久,導致我完全不知道代碼的業務邏輯想表達啥,甚至不確定這玩意和yh有沒有關係。直到最後我反覆求證,才得以確認,lstyh是用戶數組的意思,即我們正常寫法的userList。天殺的居然把list縮寫成lst!!!就為了少些一個i!!!

當然,這還不是最瞎的,最瞎的是諸如fghjk,wert之類的函數名,如果各位不知道這些函數名怎麼來的,看看鍵盤就懂了!!!!!

2.混亂的代碼結構,在controller里完成所有業務處理,一個js或者java文件上千行是常有的事。

3.前端頁面中,充斥著無數內聯樣式和內聯js響應函數。

4.奇葩的測試方式。有一天某技術主管召集了大概15人,給我們說,過會我數123,你們一起點擊網站,我們來測試一下系統的並發性!!!!!

補充:

5,脫褲子放屁的一些代碼。比如客戶端c++代碼,typeof int INT,然後在INT a=10。還有伺服器端的java代碼,final string SYLJ = 「sylj」,請問以上這些代碼有什麼意義!!!

6,假設我司的名稱是abcd公司。然後在代碼里,我發現這麼一個自定義異常類,AbcdException。。。。嗯,終於沒把exception縮寫成yc,但我還是不知道這個異常想表達什麼!!!

先想到這麼多,以後再補充


C++代碼,要做一堆三維點的空間運算(可以看作是骨骼動畫)。

結果作者自己寫了個CVector——沒用STL的vector,因此也沒有移動語義支持,各種拷貝。然後每個三維點用了size為3的CVector。

em……這些空間都是要new出來的啊……每次做矩陣運算,上來先new個1w次開闢個臨時空間,然後逐個運算……

內存分配的時間都不比運算時間少多少……

這代碼,算是爛到家了吧?正常人應該挑個BLAS庫才對吧。


然後我大刀闊斧的改,點改成float[4],32位元組對齊上AVX2……

由於是骨骼動畫,又根據骨骼的影響對點做了劃分……總之就是各種hack,按照源代碼的思路用SIMD的寫法重寫一遍。SIMD有多種寫法的,各寫一遍跑profile……

性能提升顯著,近千倍。

你以為這是好代碼?

錯!這才是最爛的代碼!之前的代碼效率雖然爛,好歹能讓人看懂在做什麼。

我這個……我自己都看不懂我在做什麼……上個圖舉例吧……

明明是C++,看上去就跟彙編一樣……


//...........總計48個參數
public String list(String type,String a,String b){
if(type.equals("1")){
//blablablabla
}else if (type.equals("2")){
//blblablablabla
}
//.........總計3495行的else if
return "";
}


我寫過的最爛的代碼⊙▽⊙前兩行

set ws=createobject("wscript.shell")

set wshshell = wscript.createobject("wscript.shell")

下面不用看了吧=_=


公司項目用的其他公司封裝的框架-金融項目。特色是堅決不寫類,sql不能寫的堅決存儲過程。這個框架里封裝的數據結構是List<Map<String, String>>。好背景介紹完了,現在需要使用一個數據集合,然後我看到了map裡面存的數據是data1 ,data1 ﹉data35,data35都是鍵值對。自己找資料庫設計,看看能不能找到注釋吧


我在上家公司有個項目外包出去,代碼很奇葩,記得一個就是 hibernate當jdbc用,沒有用HQL,返回的result一個一個設置到對象中,一個簡單的查詢弄了兩百多行代碼。


callback地獄是我見過最噁心的代碼


十數年的代碼加需求。

偶然在SetButtonEnable弄了個斷點,狂摁F8依然在那裡。

果斷inc(i)再運行,i=98。打開界面刷新按鈕要重複刷新98遍...

跟組長吐槽,他看了幾眼,擠出一句:不管,能用就行。


推薦閱讀:

保證代碼質量二三事
哪個蠢蛋寫的爛代碼?

TAG:代碼質量 | 編程規範 |