菊花

你见过最烂的代码长什么样子

发布时间:2021/7/26 12:57:46   点击数:

点击上方“编程技术进阶”,加"星标"

重磅干货,第一时间送达

经历了的项目越多,看过的奇葩代码也就越多。发现烂代码的目的并不是抨击和取笑,主要还是为了避免让自己或者身边的人写出类似的代码。

码云上面就有个热门仓库bullshit-codes[1]专门收集史上最坑爹的代码片段。下面放几个比较有意思的给大家看看:

1.一行代码就可以搞定的,非要写的啰里啰嗦。不要给我扯什么可读性,以下代码一行的写法可读性也更好。

privatebooleanisEligible(intage){booleanresult;if(age18){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("不","很");str=str.replace("你们","我们");str=str.replace("有","没有");System.out.println(str);}

效果展示:

在吗?在!你好!你好!产品有问题啊产品没有问题啊你们的服务态度不好我们的服务态度很好

3.只要我的代码够多,你就你很难看出有啥问题

/***三年前接手的一个政府网站项目,真假不知,据说是一个两年web开发经验的程序员写的,用的spring系列还是3.x版本,前端还是jsp,可能是老项目。*主要特点是:实体类中不写注释,数据库表中也没有注释,命名经常使用英文拼音混合,而且还可能是简写(grzlChangeStatus:个人资料变更状态)**挖坑不填坑,菊花塞电灯*/

ControllerpublicclassDemoController{/***这个方法一共有多行,有30多个if或elseif的条件判断,只写代表性的几个**具体方法名称记不得,逻辑是这样,前端jsp提交一个请求过来,界面中除了一些必填信息外,还有有5个下拉框,后台判断各种组合,*分别往request里面塞入不同的对象,返回的页面视图也可能不同。*/

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("已消毒")){//逻辑request.setAttribute("attr","value");return"jsp1";}elseif(param1.equals("已消毒")param2.equals("1.8米以上")){//逻辑request.setAttribute("attr","value");//你没看错,可能又是另一个视图return"jsp2";//你没看错,还可能出现多个条件,

和}elseif(param1.equals("已消毒")param2.equals("2米以上")

param3.equals("缅甸")){//逻辑request.setAttribute("attr","value");return"jsp3";//你没看错,因为他的状态或选项没有用数字类型,所以不能用之类的来判断,要列举所有状态}elseif(param1.equals("未进站")

param1.equals("已进站")

param1.equals("已消毒")param2.equals("2米以上")){request.setAttribute("attr","value");return"jsp3";//你没看错,还会出现true==true或false==false这样的代码}elseif(param4.equals("禁止入境")==trueparam5.equals("农用车")){request.setAttribute("attr","value");return"jsp4";//你没看错,还会出现逻辑非,而且,要先判断什么条件,从来不用括号包起来,要理他的逻辑,还要先理条件判断优先级}elseif(param1.equals("未进站")

param1.equals("已进站")

param1.equals("已消毒")param2.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*);}catch(Exceptione){e.printStackTrace();}returnnewDate();}

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

6.为了得到了一个用户总人数,把所有的User对象查询出来。

/**统计用户总数,来源于N年前某个用户抱怨执行效率低,贴出类似逻辑的代码.

authorwendal*/

IocBeanpublicclassCountUserTable{

InjectDaodao;

Testpublicvoidtest_user_count(){//取出全部用户对象(dao.query返回ListUser),然后取list大小就可以啦,是不是很机智intcount=dao.query(User.class,null).size();System.out.println("用户总数是"+count);}}参考资料[1]

bullshit-codes:

转载请注明:http://www.lixiangguod.com/jhgx/21855.html

------分隔线----------------------------

热点文章

  • 没有热点文章

推荐文章

  • 没有推荐文章