乐趣区

关于java:史上最坑爹最烂的代码长啥样你见过吗

经验了的我的项目越多,看过的奇葩代码也就越多。发现烂代码的目标并不是鞭挞和取笑,次要还是为了防止让本人或者身边的人写出相似的代码。

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

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

2. 前大厂程序员设计的智能 AI 客服零碎

成果展现:

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

/**
 * 三年前接手的一个政府网站我的项目,虚实不知,据说是一个两年 web 开发教训的程序员写的,用的 spring 系列还是 3.x 版本,前端还是 jsp,可能是老我的项目。* 次要特点是:实体类中不写正文,数据库表中也没有正文,命名常常应用英文拼音混合,而且还可能是简写 (grzlChangeStatus: 个人资料变更状态) * * 挖坑不填坑,菊花塞电灯 */@Controllerpublic 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");
  // 你没看错,各种状态全副存字串,而且判断的时候不思考空指针问题  if (param1.equals("已消毒")) {// 逻辑   request.setAttribute("attr", "value");
   return "jsp1";
  } else if (param1.equals("已消毒") && param2.equals("1.8 米以上")) {// 逻辑   request.setAttribute("attr", "value");
   // 你没看错,可能又是另一个视图   return "jsp2";
   // 你没看错,还可能呈现多个条件,|| 和 &&  } else if (param1.equals("已消毒") && param2.equals("2 米以上") || param3.equals("缅甸")) {// 逻辑   request.setAttribute("attr", "value");
   return "jsp3";
   // 你没看错,因为他的状态或选项没有用数字类型, 所以不能用 > < 之类的来判断,要列举所有状态  } else if (param1.equals("未进站") || param1.equals("已进站") || param1.equals("已消毒") && param2.equals("2 米以上")) {request.setAttribute("attr", "value");
   return "jsp3";
   // 你没看错,还会呈现 true==true 或 false==false 这样的代码
  }else if(param4.equals("禁止入境")==true && param5.equals("农用车")) {request.setAttribute("attr", "value");
   return "jsp4";
   // 你没看错,还会呈现逻辑非,而且,要先判断什么条件,从来不用括号包起来,要理他的逻辑,还要先理条件判断优先级  }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. 获取一天后的日期:让线程睡一会

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

6. 为了失去了一个用户总人数,把所有的 User 对象查问进去。

/**
 统计用户总数, 来源于 N 年前某个用户埋怨执行效率低, 贴出相似逻辑的代码.
 @author wendal
*/
@IocBean
public class CountUserTable {
    @Inject Dao dao;
    @Test
    public void test_user_count() {// 取出全副用户对象 (dao.query 返回 List<User>), 而后取 list 大小就能够啦, 是不是很机智
 int count = dao.query(User.class, null).size();
 System.out.println("用户总数是" + count);
 }
}
退出移动版