經歷了的項目越多,看過的奇葩代碼也就越多。發現爛代碼的目的並非抨擊和取笑,主要仍是爲了不讓本身或者身邊的人寫出相似的代碼。前端
碼雲上面就有個熱門倉庫 bullshit-codes[1] 專門收集史上最坑爹的代碼片斷。下面放幾個比較有意思的給你們看看:程序員
1.一行代碼就能夠搞定的,非要寫的囉裏囉嗦。不要給我扯什麼可讀性,如下代碼一行的寫法可讀性也更好。web
2.前大廠程序員設計的智能 AI 客服系統spring
效果展現:數據庫
3.只要個人代碼夠多,那你就很難看出有啥問題session
/** * 三年前接手的一個政府網站項目,真假不知,聽說是一個兩年web開發經驗的程序員寫的, 用的spring系列仍是3.x版本,前端仍是jsp,多是老項目。 * 主要特色是:實體類中不寫註釋,數據庫表中也沒有註釋,命名常常使用英文拼音混合,並且還多是簡寫(grzlChangeStatus:我的資料變動狀態) * * 挖坑不填坑,菊花塞電燈 */@Controllerpublic class DemoController { /** * 這個方法一共有800多行,有30多個if或else if的條件判斷,只寫表明性的幾個 * * 具體方法名稱記不得,邏輯是這樣,前端jsp提交一個請求過來,界面中除了一些必填信息外,還有有5個下拉框,後臺判斷各類組合, * 分別往request裏面塞入不一樣的對象,返回的頁面視圖也可能不一樣。 */ @RequestMapping("/submit") public String template(HttpServletRequest request, HttpServletResponse response, HttpSession session) { String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); String param3 = request.getParameter("param3"); String param4 = request.getParameter("param4"); String param5 = request.getParameter("param5"); // 你沒看錯,各類狀態所有存字串,並且判斷的時候不考慮空指針問題 if (param1.equals("已消毒")) { // 邏輯 request.setAttribute("attr", "value"); return "jsp1"; } else if (param1.equals("已消毒") && param2.equals("1.8米以上")) { // 邏輯 request.setAttribute("attr", "value"); // 你沒看錯,可能又是另外一個視圖 return "jsp2"; // 你沒看錯,還可能出現多個條件,|| 和 && } else if (param1.equals("已消毒") && param2.equals("2米以上") || param3.equals("緬甸")) { // 邏輯 request.setAttribute("attr", "value"); return "jsp3"; // 你沒看錯,由於他的狀態或選項沒有用數字類型,因此不能用 > < 之類的來判斷,要列舉全部狀態 } else if (param1.equals("未進站") || param1.equals("已進站") || param1.equals("已消毒") && param2.equals("2米以上")) { request.setAttribute("attr", "value"); return "jsp3"; //你沒看錯,還會出現 true==true 或false==false這樣的代碼 }else if(param4.equals("禁止入境")==true && param5.equals("農用車")) { request.setAttribute("attr", "value"); return "jsp4"; //你沒看錯,還會出現邏輯非,並且,要先判斷什麼條件,歷來不用括號包起來,要理他的邏輯,還要先理條件判斷優先級 }else if(param1.equals("未進站") || param1.equals("已進站") || param1.equals("已消毒") && param2.equals("2米以上") && !param3.equals("緬甸")) { request.setAttribute("attr", "value"); return "jsp5"; } //省略剩下的30多個相似的判斷 else { return "default"; } }}
以上代碼的問題:app
4.獲取一天後的日期:讓線程睡一會jsp
5.新上的項目的代碼命名,表示看不太懂網站
6.爲了獲得了一個用戶總人數,把全部的 User 對象查詢出來。spa
/** 統計用戶總數,來源於N年前某個用戶抱怨執行效率低,貼出相似邏輯的代碼. @author wendal */ @IocBean public class CountUserTable { @Inject Dao dao; @Test public void test_user_count() { // 取出所有用戶對象(dao.query返回List<User>),而後取list大小就能夠啦,是否是很機智 int count = dao.query(User.class, null).size(); System.out.println("用戶總數是" + count); } }