降低模块复杂度
抽取函数:独立业务代码封装为函数,通过函数名诠释代码作用,做到见名知意合并重复:不同条件的分支,有相似的处理,可以提炼出分支以外,或者封装为函数移除控制标记:有控制标签作为条件的,使用break/return取代设计模式:对于同一层的if/else, - switch/case分支过多,可考虑采用状态机或策略模式、表驱动法(Map查找)单一职责:一个函数应该只实现一个功能点
变量个数
不需要有过多的局部变量,单个函数建议局部变量不超过5个
解决方案;Replace Method with Method Object
方法-对象-简化代码
Replace Method with Method Object(以函数对象取代函数)
问题:你有一个过长函数,它的局部变量交织在一起,以致于你无法应用提炼函数(Extract Method) 。解决:将函数移到一个独立的类中,使得局部变量成了这个类的字段。然后,你可以将函数分割成这个类中的多个函数。 以查询取代临时变量(Replace Temp with Query) (替换临时变量为函数调用)引入参数对象(Introduce Parameter Object)
问题:某些参数总是很自然地同时出现。解决: 以一个对象来取代这些参数。 保持对象完整(Preserve Whole Object)
问题:你从某个对象中取出若干值,将它们作为某一次函数调用时的参数。解决:改为传递整个对象
int low = daysTempRange.getLow();
int high = daysTempRange.getHigh();
boolean withinPlan = plan.withinRange(low, high);
to
改为传递整个对象。
boolean withinPlan = plan.withinRange(daysTempRange);
分解条件表达式(Decompose Conditional)
解决:复杂的条件表达式,使用函数进行封装
嵌套层次
降低if/else嵌套层次方法
少使用else:使用if + return,代码反向判断,避免进入 else 分支,提前 return减少非空判断:如Java8引用Optional的orElse或orElseGet方法合并if条件判断:使用条件与(&&),利用条件短路的特性三元表达式:如Java中的 e = (a==b) ? c : d ,c与d可以是函数调用
try/catch可以再嵌套try/catch,但也是最容易出逻辑问题的地方,降低try/catch嵌套层次方法:
抽取函数:try与catch的中各代码块超过10行以上,建议是分别抽取函数,try/catch块内只有函数调用合并try/catch:分析是否可以合并try/catch到同一层次折分try/catch:让try的范围更小,尽早catch,避免大try中不必要的嵌套