下面讲一些代码优化的事情
- 还记得刚开始写代码的时候,遇到过一个简单的编程程序,根据班上同学考试的分数来分类,90~99为A,80~89为B,70~79为C,60~69为D,0~59为E,相信大家随便都能写出来,代码如下
很简单的就写出代码来了,那我们现在来分析下运行时这段代码的状况,假设,我们现在计算一个班(30人)的数据,正常情况 [90-99] 和 [0-59] 都是比较少的,而 [70-90] 的比较多,先假设 [90-99] 只有1人,而[70-90]的有20个。这个时候,有20个[70-90]的需要多判断一次【是否是[90-99]区间的】,那么就无用的判断是20多次。如果把上面的代码中,判断[90-99]的放在[70-90]判断的后面,1人是[90-99]之间的,只多了2次判断([80-90] 和[70-80] 的判断)。通过这个例子,想说明的是善用if else。public char typeOf(double score){ if(score >= 90 && score < 100){ return 'A'; }else if(score >= 80 && score < 90){ return 'B'; }else if(score >= 70 && score < 80){ return 'C'; }else if(score >= 60 && score < 70){ return 'D'; }else{ return 'E'; } }
- (不喜欢个人心理活动的,可以直接跳到粗体字部分)最近一直在看代码,看到了很多的错误,也看到了自己的不足,刚开始接触别人的代码有点无论怎么样还是有点抵触,倒是后面看多了也就习惯了,现在回想反思一下,看到了自己的不足,为什么自己当初就不能正确面对看代码这问题,面对好的代码,学习人家写得好的方面,面对写得不太注意的地方,自己反思自己是不是这样写的,然后也能或多或少的有两点,好了不扯远了。回归主题:介绍一下场景,在数据库有配置create_table_handler字段,并在spring的xml里面配置了相应的子类,下面的代码片段就是从配置中获取id,再根据id获取对象,对于spring的Application获取不做介绍,大家可网上查资料很多。先贴出代码:
public static <T> T getBean(String name) throws BeansException { return (T) applicationContext.getBean(name); }
上面的代码总体上来说写得很严谨,每个使用的变量的非空校验,但是对于Sping的getBean,我觉得使用的地方应该不会少,而每处都要在使用getBean()之前校验传入id的判断,在我感觉有点有点越俎代庖了,这个校验我觉得应该交给前面的代码自己处理,自己根据情况才决定返回null或者对象或者抛出异常,而且这样写的会为代码缩减很多代码,也更符合面向对象代码。if(tableInfo != null && tableInfo.getCreateTableHandle() != null){ CreateTableDefaultHandle handle = SpringContextUtil.getBean(tableInfo.getCreateTableHandle()); if(handle != null){ try { handle.createTable(null, this.getRequest()); } catch (BusinessLevelException e) { e.printStackTrace(); } } }
- 偶看代码,看到下面的代码,自己有一个小小的优化。
修改后:for(BusUnitProject pj:projectList){ if(!hasHoliday){ hasHoliday = pj.isHoliday(); } weekReportKey = saveOneProject( keyId, pj, curRpBase, weekMap); }
for(BusUnitProject pj:projectList){ hasHoliday &= pj.isHoliday(); weekReportKey = saveOneProject( keyId, pj, curRpBase, weekMap); }