1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        你見過最爛的 Java 代碼長什么樣子?

        共 2105字,需瀏覽 5分鐘

         ·

        2020-09-15 22:28




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

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

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

        private?boolean?isEligible(int?age)?{
        ????boolean?result;
        ????if?(age?>?18)?{
        ????????result?=?true;
        ????}?else?{
        ????????result?=?false;
        ????}
        ????return?result;

        }

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

        Scanner?sc?=?new?Scanner(System.in);
        String?str;
        //?待優(yōu)化
        while?(true)?{
        ????str?=?sc.next();
        ????//?測試環(huán)境,正式環(huán)境從數(shù)據(jù)庫中獲取
        ????str?=?str.replace("嗎",?"");
        ????str?=?str.replace("?",?"!");
        ????str?=?str.replace("?",?"!");
        ????str?=?str.replace("不",?"很");
        ????str?=?str.replace("你們",?"我們");
        ????str?=?str.replace("有",?"沒有");

        ????System.out.println(str);
        }

        效果展示:

        在嗎?
        在!
        你好!
        你好!
        產品有問題啊
        產品沒有問題啊
        你們的服務態(tài)度不好
        我們的服務態(tài)度很好

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

        /**
        ?*?三年前接手的一個政府網(wǎng)站項目,真假不知,據(jù)說是一個兩年web開發(fā)經驗的程序員寫的,?用的spring系列還是3.x版本,前端還是jsp,可能是老項目。
        ?*?主要特點是:實體類中不寫注釋,數(shù)據(jù)庫表中也沒有注釋,命名經常使用英文拼音混合,而且還可能是簡寫(grzlChangeStatus:個人資料變更狀態(tài))
        ?*
        ?*?挖坑不填坑,菊花塞電燈
        ?*/

        @Controller
        public?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");
        ??//?你沒看錯,各種狀態(tài)全部存字串,而且判斷的時候不考慮空指針問題
        ??if?(param1.equals("已消毒"))?{
        ???//?邏輯
        ???request.setAttribute("attr",?"value");
        ???return?"jsp1";
        ??}?else?if?(param1.equals("已消毒")?&&?param2.equals("1.8米以上"))?{
        ???//?邏輯
        ???request.setAttribute("attr",?"value");
        ???//?你沒看錯,可能又是另一個視圖
        ???return?"jsp2";
        ???//?你沒看錯,還可能出現(xiàn)多個條件,||?和?&&
        ??}?else?if?(param1.equals("已消毒")?&&?param2.equals("2米以上")?||?param3.equals("緬甸"))?{
        ???//?邏輯
        ???request.setAttribute("attr",?"value");
        ???return?"jsp3";
        ???//?你沒看錯,因為他的狀態(tài)或選項沒有用數(shù)字類型,所以不能用?>?
        ??}?else?if?(param1.equals("未進站")?||?param1.equals("已進站")?||?param1.equals("已消毒")?&&?param2.equals("2米以上"))?{
        ???request.setAttribute("attr",?"value");
        ???return?"jsp3";
        ???//你沒看錯,還會出現(xiàn)?true==true?或false==false這樣的代碼
        ??}else?if(param4.equals("禁止入境")==true?&&?param5.equals("農用車"))?{
        ???request.setAttribute("attr",?"value");
        ???return?"jsp4";
        ???//你沒看錯,還會出現(xiàn)邏輯非,而且,要先判斷什么條件,從來不用括號包起來,要理他的邏輯,還要先理條件判斷優(yōu)先級
        ??}else?if(param1.equals("未進站")?||?param1.equals("已進站")?||?param1.equals("已消毒")?&&?param2.equals("2米以上")?&&?!param3.equals("緬甸"))?{
        ???request.setAttribute("attr",?"value");
        ???return?"jsp5";
        ??}
        ??//省略剩下的30多個類似的判斷
        ??else?{
        ???return?"default";
        ??}
        ?}
        }

        以上代碼的問題:

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

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

        public?static?Date?getAfterDate(int?day)?{
        ????try?{
        ????????Thread.sleep(day?*?24?*?60?*?60?*?1000);
        ????}?catch?(Exception?e)?{
        ????????e.printStackTrace();
        ????}
        ????return?new?Date();
        }

        5.新上的項目的代碼命名,表示看不太懂

        6.為了得到了一個用戶總人數(shù),把所有的 User 對象查詢出來。

        /**
        ??統(tǒng)計用戶總數(shù),來源于N年前某個用戶抱怨執(zhí)行效率低,貼出類似邏輯的代碼.
        ??@author?wendal
        */

        @IocBean
        public?class?CountUserTable?{

        ????@Inject?Dao?dao;

        ????@Test
        ????public?void?test_user_count()?{
        ????????//?取出全部用戶對象(dao.query返回List),然后取list大小就可以啦,是不是很機智
        ????????int?count?=?dao.query(User.class,?null).size();
        ????????System.out.println("用戶總數(shù)是"?+?count);
        ????}
        }

        參考資料

        [1]

        bullshit-codes: https://gitee.com/oschina/bullshit-codes


        ? ? ? ?
        ???
        一圖了解 Google 工具棧
        RESTful API 最佳實踐
        你編寫的Java代碼是咋跑起來的?

        覺得不錯,點個在看~

        瀏覽 38
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美日韩成人 | 亚洲色中色 | 久久精品熟女亚洲AV麻豆蜜桃 | 中国三级欧美一级 | 日本免费一区二区三区 | 免费无码婬A片在线视频夜网站 | 爆草美女| 外国做爰猛烈床戏大尺度 | 91黄视频在线观看 | av动漫天堂 |