经历的项目越多,看到的奇葩代码就越多。发现烂代码的目的不是为了批评和取笑,主要是为了避免让自己或者身边的人写出类似的代码。码云上有个热门仓库bullshit-codes[1],专门收集史上作弊最多的代码片段。这里再提几个比较有意思的给大家看看:1、一行代码就可以搞定,还得写得啰嗦。不要和我说可读性,下面这行代码的可读性也更高。privatebooleanisEligible(intage){booleanresult;if(age>18){result=true;}else{result=false;}returnresult;}2.前大厂程序员设计的智能AI客服系统Scannersc=newScanner(System.in);Stringstr;//待优化while(true){str=sc.next();//测试环境,正式环境从数据库获取str=str.replace("?","");str=str.replace("?","!");str=str.replace("?","!");str=str.replace("No","Very");str=str.replace("You","We");str=str.replace("Yes","No");System.out.println(str);}效果展示:Areyouthere?存在!你好!你好!产品有问题,产品没问题,你的服务态度不好,我们的服务态度好吗?是的!你好!你好!产品有问题,产品没问题,你的服务态度不好嘛,我们的服务态度很好3.只要我码够,你就很难看清是什么错/***三年前接手的一个政府网站项目,不知道真假,据说是两年的web开发项目资深程序员写的,spring系列还是3.x版本,前端还是jsp,可能是老项目了。*主要特点是:实体类不写注释,数据库表不写注释。命名中经常混有英文拼音,可能会缩写(grzlChangeStatus:个人资料变更状态)*/@ControllerpublicclassDemoController{/***这个方法一共800多行,iforelseif就有30多行条件判断,只写了几个有代表性的**具体方法名记不住了,逻辑是这样的,前端jsp提交请求来的时候,除了一些需要的信息外,还有5个drop-界面中的下拉框。后台判断各种组合,*将不同的对象分别放入请求中,返回的pageview也可能不同。*/@RequestMapping("/submit")publicStringtemplate(HttpServletRequestrequest,HttpServletResponseresponse,HttpSessionsession){Stringparam1=request.getParameter("param1");Stringparam2=request.getParameter("param2");Stringparam3=request.getParameter("param3);Stringparam4=request.getParameter("param4");Stringparam5=request.getParameter("param5");//你没看错,所有状态都存入字符串,判断时不考虑空指针问题if(param1.equals("Sanitized")){//logicrequest.setAttribute("attr","value");return"jsp1";}elseif(param1.equals("Sanitized")&¶m2.equals("1.8以上m")){//逻辑request.setAttribute("attr","value");//你没看错,可能是另一个viewreturn"jsp2";//你没看错,可能出现Multiplecondition,||and&&}elseif(param1.equals("Sanitized")&¶m2.equals("2米以上")||param3.equals("缅甸")){//logicrequest.setAttribute("attr","value");返回“jsp3”t;;//你没看错,因为它的status或者options没有使用数字类型,所以不能用><之类的判断,需要列出所有status}elseif(param1.equals("notentered")||param1.equals("entered")||param1.equals("disinfected")&¶m2.equals("2米以上")){request.setAttribute("attr","value");return"jsp3";//你没看错,会有true==trueorfalse==false这样的代码}elseif(param4.equals("禁止进入")==true&¶m5.equals("农用车")){request.setAttribute("attr","value");return"jsp4";//你没有看错,会出现逻辑非,必须先判断什么条件,千万不要用括号括起来,要看懂它的逻辑,还需要先判断条件的优先级}elseif(param1.equals("notentered")||param1.equals("entered")||param1.equals("disinfected")&¶m2.equals("2多饭")&&!param3.equals("缅甸")){request.setAttribute("attr","value");return"jsp5";}//省略剩余30个类似的判断else{return"default";}}}上面代码的问题:空指针异常逻辑混乱,有些elseif根本进不去4.获取一天后的日期:让线程休眠一会publicstaticDategetAfterDate(intday){try{Thread.sleep(day*24*60*60*1000);}catch(Exceptione){e.printStackTrace();}returnnewDate();}5.新上传项目的代号意思是看不懂6。为了得到用户总数,查询所有User对象/**用户总数,来自N年前一个用户抱怨执行效率低,贴出一段类似逻辑的代码。@authorwendal*/@IocBeanpublicclassCountUserTable{@InjectDaodao;@Testpublicvoidtest_user_count(){//取出所有用户对象(dao.query返回List
