自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你見(jiàn)過(guò)最爛的Java代碼長(zhǎng)什么樣子?

開(kāi)發(fā) 后端
經(jīng)歷了的項(xiàng)目越多,看過(guò)的奇葩代碼也就越多。發(fā)現(xiàn)爛代碼的目的并不是抨擊和取笑,主要還是為了避免讓自己或者身邊的人寫(xiě)出類似的代碼。

經(jīng)歷了的項(xiàng)目越多,看過(guò)的奇葩代碼也就越多。發(fā)現(xiàn)爛代碼的目的并不是抨擊和取笑,主要還是為了避免讓自己或者身邊的人寫(xiě)出類似的代碼。

碼云上面就有個(gè)熱門倉(cāng)庫(kù) bullshit-codes[1] 專門收集史上最坑爹的代碼片段。下面放幾個(gè)比較有意思的給大家看看:

1.一行代碼就可以搞定的,非要寫(xiě)的啰里啰嗦。不要給我扯什么可讀性,以下代碼一行的寫(xiě)法可讀性也更好。

  1. private boolean isEligible(int age) { 
  2.     boolean result; 
  3.     if (age > 18) { 
  4.         result = true
  5.     } else { 
  6.         result = false
  7.     } 
  8.     return result; 
  9.  

2.前大廠程序員設(shè)計(jì)的智能 AI 客服系統(tǒng)

  1. Scanner sc = new Scanner(System.in); 
  2. String str; 
  3. // 待優(yōu)化 
  4. while (true) { 
  5.     str = sc.next(); 
  6.     // 測(cè)試環(huán)境,正式環(huán)境從數(shù)據(jù)庫(kù)中獲取 
  7.     str = str.replace("嗎"""); 
  8.     str = str.replace("?""!"); 
  9.     str = str.replace("?""!"); 
  10.     str = str.replace("不""很"); 
  11.     str = str.replace("你們""我們"); 
  12.     str = str.replace("有""沒(méi)有"); 
  13.  
  14.     System.out.println(str); 

效果展示:

  1. 在嗎? 
  2. 在! 
  3. 你好! 
  4. 你好! 
  5. 產(chǎn)品有問(wèn)題啊 
  6. 產(chǎn)品沒(méi)有問(wèn)題啊 
  7. 你們的服務(wù)態(tài)度不好 
  8. 我們的服務(wù)態(tài)度很好 

在嗎?在!你好!你好!產(chǎn)品有問(wèn)題啊產(chǎn)品沒(méi)有問(wèn)題啊你們的服務(wù)態(tài)度不好我們的服務(wù)態(tài)度很好

3.只要我的代碼夠多,你就你很難看出有啥問(wèn)題

  1. /** 
  2.  * 三年前接手的一個(gè)政府網(wǎng)站項(xiàng)目,真假不知,據(jù)說(shuō)是一個(gè)兩年web開(kāi)發(fā)經(jīng)驗(yàn)的程序員寫(xiě)的, 用的spring系列還是3.x版本,前端還是jsp,可能是老項(xiàng)目。 
  3.  * 主要特點(diǎn)是:實(shí)體類中不寫(xiě)注釋,數(shù)據(jù)庫(kù)表中也沒(méi)有注釋,命名經(jīng)常使用英文拼音混合,而且還可能是簡(jiǎn)寫(xiě)(grzlChangeStatus:個(gè)人資料變更狀態(tài)) 
  4.  * 
  5.  * 挖坑不填坑,菊花塞電燈 
  6.  */ 
  7. @Controller 
  8. public class DemoController { 
  9.  /** 
  10.   * 這個(gè)方法一共有800多行,有30多個(gè)if或else if的條件判斷,只寫(xiě)代表性的幾個(gè) 
  11.   * 
  12.   * 具體方法名稱記不得,邏輯是這樣,前端jsp提交一個(gè)請(qǐng)求過(guò)來(lái),界面中除了一些必填信息外,還有有5個(gè)下拉框,后臺(tái)判斷各種組合, 
  13.   * 分別往request里面塞入不同的對(duì)象,返回的頁(yè)面視圖也可能不同。 
  14.   */ 
  15.  @RequestMapping("/submit"
  16.  public String template(HttpServletRequest request, HttpServletResponse response, HttpSession session) { 
  17.   String param1 = request.getParameter("param1"); 
  18.   String param2 = request.getParameter("param2"); 
  19.   String param3 = request.getParameter("param3"); 
  20.   String param4 = request.getParameter("param4"); 
  21.   String param5 = request.getParameter("param5"); 
  22.   // 你沒(méi)看錯(cuò),各種狀態(tài)全部存字串,而且判斷的時(shí)候不考慮空指針問(wèn)題 
  23.   if (param1.equals("已消毒")) { 
  24.    // 邏輯 
  25.    request.setAttribute("attr""value"); 
  26.    return "jsp1"
  27.   } else if (param1.equals("已消毒") && param2.equals("1.8米以上")) { 
  28.    // 邏輯 
  29.    request.setAttribute("attr""value"); 
  30.    // 你沒(méi)看錯(cuò),可能又是另一個(gè)視圖 
  31.    return "jsp2"
  32.    // 你沒(méi)看錯(cuò),還可能出現(xiàn)多個(gè)條件,|| 和 && 
  33.   } else if (param1.equals("已消毒") && param2.equals("2米以上") || param3.equals("緬甸")) { 
  34.    // 邏輯 
  35.    request.setAttribute("attr""value"); 
  36.    return "jsp3"
  37.    // 你沒(méi)看錯(cuò),因?yàn)樗臓顟B(tài)或選項(xiàng)沒(méi)有用數(shù)字類型,所以不能用 > < 之類的來(lái)判斷,要列舉所有狀態(tài) 
  38.   } else if (param1.equals("未進(jìn)站") || param1.equals("已進(jìn)站") || param1.equals("已消毒") && param2.equals("2米以上")) { 
  39.    request.setAttribute("attr""value"); 
  40.    return "jsp3"
  41.    //你沒(méi)看錯(cuò),還會(huì)出現(xiàn) true==true 或false==false這樣的代碼 
  42.   }else if(param4.equals("禁止入境")==true && param5.equals("農(nóng)用車")) { 
  43.    request.setAttribute("attr""value"); 
  44.    return "jsp4"
  45.    //你沒(méi)看錯(cuò),還會(huì)出現(xiàn)邏輯非,而且,要先判斷什么條件,從來(lái)不用括號(hào)包起來(lái),要理他的邏輯,還要先理?xiàng)l件判斷優(yōu)先級(jí) 
  46.   }else if(param1.equals("未進(jìn)站") || param1.equals("已進(jìn)站") || param1.equals("已消毒") && param2.equals("2米以上") && !param3.equals("緬甸")) { 
  47.    request.setAttribute("attr""value"); 
  48.    return "jsp5"
  49.   } 
  50.   //省略剩下的30多個(gè)類似的判斷 
  51.   else { 
  52.    return "default"
  53.   } 
  54.  } 

以上代碼的問(wèn)題:

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

4.獲取一天后的日期:讓線程睡一會(huì)

  1. public static Date getAfterDate(int day) { 
  2.     try { 
  3.         Thread.sleep(day * 24 * 60 * 60 * 1000); 
  4.     } catch (Exception e) { 
  5.         e.printStackTrace(); 
  6.     } 
  7.     return new Date(); 

5.新上的項(xiàng)目的代碼命名,表示看不太懂

 

 

 

 

6.為了得到了一個(gè)用戶總?cè)藬?shù),把所有的 User 對(duì)象查詢出來(lái)。

  1. /** 
  2.   統(tǒng)計(jì)用戶總數(shù),來(lái)源于N年前某個(gè)用戶抱怨執(zhí)行效率低,貼出類似邏輯的代碼. 
  3.   @author wendal 
  4. */ 
  5. @IocBean 
  6. public class CountUserTable { 
  7.  
  8.     @Inject Dao dao; 
  9.  
  10.     @Test 
  11.     public void test_user_count() { 
  12.         // 取出全部用戶對(duì)象(dao.query返回List<User>),然后取list大小就可以啦,是不是很機(jī)智 
  13.         int count = dao.query(User.class, null).size(); 
  14.         System.out.println("用戶總數(shù)是" + count); 
  15.     } 

參考資料

[1]bullshit-codes: https://gitee.com/oschina/bullshit-codes 

責(zé)任編輯:龐桂玉 來(lái)源: Java編程
相關(guān)推薦

2018-06-06 16:25:44

碼農(nóng)出身奇特

2020-11-04 11:17:20

好代碼程序員整潔

2021-03-12 11:50:08

項(xiàng)目組件 API

2021-05-27 09:30:51

Java流程控制

2020-12-16 07:37:35

Java代碼成本

2013-05-29 09:27:54

Windows 8.1

2021-10-29 10:55:07

Go 泛型語(yǔ)言

2022-10-10 08:47:49

ITCIO數(shù)據(jù)

2021-02-19 10:14:49

云計(jì)算公共云

2022-06-01 11:14:42

Java代碼技巧

2015-07-23 09:40:24

爛代碼程序員

2013-03-18 10:00:21

面試題程序員面試官

2021-05-08 13:11:58

物聯(lián)網(wǎng)IOT物聯(lián)網(wǎng)技術(shù)

2020-07-14 14:50:44

Vue代碼前端

2020-07-15 07:57:17

代碼Vue開(kāi)發(fā)

2014-04-08 09:56:30

銷售易CRM

2021-11-29 07:42:44

CSS 技巧CSS 繪圖技巧

2024-03-04 09:19:33

CSSbackground前端

2011-10-10 11:04:54

2022-03-15 16:19:13

物聯(lián)網(wǎng)物聯(lián)網(wǎng) 2.0IoT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)