你見(jiàn)過(guò)最爛的 Java 代碼長(zhǎng)什么樣子?
經(jīng)歷了的項(xiàng)目越多,看過(guò)的奇葩代碼也就越多。發(fā)現(xiàn)爛代碼的目的并不是抨擊和取笑,主要還是為了避免讓自己或者身邊的人寫(xiě)出類(lèi)似的代碼。
碼云上面就有個(gè)熱門(mén)倉(cāng)庫(kù) bullshit-codes[1] 專(zhuān)門(mén)收集史上最坑爹的代碼片段。下面放幾個(gè)比較有意思的給大家看看:
1.一行代碼就可以搞定的,非要寫(xiě)的啰里啰嗦。不要給我扯什么可讀性,以下代碼一行的寫(xiě)法可讀性也更好。
private?boolean?isEligible(int?age)?{
????boolean?result;
????if?(age?>?18)?{
????????result?=?true;
????}?else?{
????????result?=?false;
????}
????return?result;
}
2.前大廠(chǎng)程序員設(shè)計(jì)的智能 AI 客服系統(tǒng)
Scanner?sc?=?new?Scanner(System.in);
String?str;
//?待優(yōu)化
while?(true)?{
????str?=?sc.next();
????//?測(cè)試環(huán)境,正式環(huán)境從數(shù)據(jù)庫(kù)中獲取
????str?=?str.replace("嗎",?"");
????str?=?str.replace("?",?"!");
????str?=?str.replace("?",?"!");
????str?=?str.replace("不",?"很");
????str?=?str.replace("你們",?"我們");
????str?=?str.replace("有",?"沒(méi)有");
????System.out.println(str);
}
效果展示:
在嗎?
在!
你好!
你好!
產(chǎn)品有問(wèn)題啊
產(chǎn)品沒(méi)有問(wèn)題啊
你們的服務(wù)態(tài)度不好
我們的服務(wù)態(tài)度很好
3.只要我的代碼夠多,你就你很難看出有啥問(wèn)題
/**
?*?三年前接手的一個(gè)政府網(wǎng)站項(xiàng)目,真假不知,據(jù)說(shuō)是一個(gè)兩年web開(kāi)發(fā)經(jīng)驗(yàn)的程序員寫(xiě)的,?用的spring系列還是3.x版本,前端還是jsp,可能是老項(xiàng)目。
?*?主要特點(diǎn)是:實(shí)體類(lèi)中不寫(xiě)注釋?zhuān)瑪?shù)據(jù)庫(kù)表中也沒(méi)有注釋?zhuān)?jīng)常使用英文拼音混合,而且還可能是簡(jiǎn)寫(xiě)(grzlChangeStatus:個(gè)人資料變更狀態(tài))
?*
?*?挖坑不填坑,菊花塞電燈
?*/
@Controller
public?class?DemoController?{
?/**
??*?這個(gè)方法一共有800多行,有30多個(gè)if或else?if的條件判斷,只寫(xiě)代表性的幾個(gè)
??*
??*?具體方法名稱(chēng)記不得,邏輯是這樣,前端jsp提交一個(gè)請(qǐng)求過(guò)來(lái),界面中除了一些必填信息外,還有有5個(gè)下拉框,后臺(tái)判斷各種組合,
??*?分別往request里面塞入不同的對(duì)象,返回的頁(yè)面視圖也可能不同。
??*/
?@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");
??//?你沒(méi)看錯(cuò),各種狀態(tài)全部存字串,而且判斷的時(shí)候不考慮空指針問(wèn)題
??if?(param1.equals("已消毒"))?{
???//?邏輯
???request.setAttribute("attr",?"value");
???return?"jsp1";
??}?else?if?(param1.equals("已消毒")?&&?param2.equals("1.8米以上"))?{
???//?邏輯
???request.setAttribute("attr",?"value");
???//?你沒(méi)看錯(cuò),可能又是另一個(gè)視圖
???return?"jsp2";
???//?你沒(méi)看錯(cuò),還可能出現(xiàn)多個(gè)條件,||?和?&&
??}?else?if?(param1.equals("已消毒")?&&?param2.equals("2米以上")?||?param3.equals("緬甸"))?{
???//?邏輯
???request.setAttribute("attr",?"value");
???return?"jsp3";
???//?你沒(méi)看錯(cuò),因?yàn)樗臓顟B(tài)或選項(xiàng)沒(méi)有用數(shù)字類(lèi)型,所以不能用?>?
??}?else?if?(param1.equals("未進(jìn)站")?||?param1.equals("已進(jìn)站")?||?param1.equals("已消毒")?&&?param2.equals("2米以上"))?{
???request.setAttribute("attr",?"value");
???return?"jsp3";
???//你沒(méi)看錯(cuò),還會(huì)出現(xiàn)?true==true?或false==false這樣的代碼
??}else?if(param4.equals("禁止入境")==true?&&?param5.equals("農(nóng)用車(chē)"))?{
???request.setAttribute("attr",?"value");
???return?"jsp4";
???//你沒(méi)看錯(cuò),還會(huì)出現(xiàn)邏輯非,而且,要先判斷什么條件,從來(lái)不用括號(hào)包起來(lái),要理他的邏輯,還要先理?xiàng)l件判斷優(yōu)先級(jí)
??}else?if(param1.equals("未進(jìn)站")?||?param1.equals("已進(jìn)站")?||?param1.equals("已消毒")?&&?param2.equals("2米以上")?&&?!param3.equals("緬甸"))?{
???request.setAttribute("attr",?"value");
???return?"jsp5";
??}
??//省略剩下的30多個(gè)類(lèi)似的判斷
??else?{
???return?"default";
??}
?}
}
以上代碼的問(wèn)題:
空指針異常 邏輯混亂,部分 else if 根本進(jìn)不去
4.獲取一天后的日期:讓線(xiàn)程睡一會(huì)
public?static?Date?getAfterDate(int?day)?{
????try?{
????????Thread.sleep(day?*?24?*?60?*?60?*?1000);
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????}
????return?new?Date();
}
5.新上的項(xiàng)目的代碼命名,表示看不太懂

6.為了得到了一個(gè)用戶(hù)總?cè)藬?shù),把所有的 User 對(duì)象查詢(xún)出來(lái)。
/**
??統(tǒng)計(jì)用戶(hù)總數(shù),來(lái)源于N年前某個(gè)用戶(hù)抱怨執(zhí)行效率低,貼出類(lèi)似邏輯的代碼.
??@author?wendal
*/
@IocBean
public?class?CountUserTable?{
????@Inject?Dao?dao;
????@Test
????public?void?test_user_count()?{
????????//?取出全部用戶(hù)對(duì)象(dao.query返回List),然后取list大小就可以啦,是不是很機(jī)智
????????int?count?=?dao.query(User.class,?null).size();
????????System.out.println("用戶(hù)總數(shù)是"?+?count);
????}
}
參考資料
bullshit-codes: https://gitee.com/oschina/bullshit-codes
完
? ? ? ?
???覺(jué)得不錯(cuò),點(diǎn)個(gè)在看~

評(píng)論
圖片
表情
