史上最坑爹最爛的代碼長啥樣?你見過嗎?

經歷了的項目越多,看過的奇葩代碼也就越多。發現爛代碼的目的並非抨擊和取笑,主要仍是爲了不讓本身或者身邊的人寫出相似的代碼。前端

碼雲上面就有個熱門倉庫 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

  • 空指針異常
  • 邏輯混亂,部分 else if 根本進不去

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);
 }
}
相關文章
相關標籤/搜索