代码整洁之道-coding-Replace Method with Method Object

降低模块复杂度
  • 抽取函数:独立业务代码封装为函数,通过函数名诠释代码作用,做到见名知意
  • 合并重复:不同条件的分支,有相似的处理,可以提炼出分支以外,或者封装为函数
  • 移除控制标记:有控制标签作为条件的,使用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中不必要的嵌套
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值