简化条件表达式之三 :Consolidate Duplicate Conditional Fragments(合并重复的条件片段)

在条件式的每个分支上有着相同的一段代码。

将这段重复代码搬移到条件式之外。

     if (isSpecialDeal()) {

         total = price * 0.95;

         send();

     }

     else {

         total = price * 0.98;

         send();

     }

 

     if (isSpecialDeal())

         total = price * 0.95;

     else

         total = price * 0.98;

     send();

动机(Motivation)

有时你会发现,一组条件式的所有分支都执行了相同的某段代码。如果是这样,你就应该将这段代码搬移到条件式外面。这样,代码才能更清楚地表明哪些东西随条件的变化而变化、哪些东西保持不变。

作法(Mechanics)

·鉴别出「执行方式不随条件变化而变化」的代码。

·如果这些共通代码位于条件式起始处,就将它移到条件式之前。

·如果这些共通代码位于条件式尾端,就将它移到条件式之后。

·如果这些共通代码位于条件式中段,就需要观察共通代码之前或之后的代码 是否改变了什么东西。如果的确有所改变,应该首先将共通代码向前或向后 移动,移至条件式的起始处或尾端,再以前面所说的办法来处理。

·如果共通代码不止一条语句,你应该首先使用以Extract Method 将共通 代码提炼到一个独立函数中,再以前面所说的办法来处理。

范例:(Example)

你可能遇到这样的代码:

     if (isSpecialDeal()) {

         total = price * 0.95;

         send();

     }

     else {

         total = price * 0.98;

         send();

     }

由于条件式的两个分支都执行了 send() 函数,所以我应该将send() 移到条件式的外围:

     if (isSpecialDeal())

         total = price * 0.95;

     else

         total = price * 0.98;

     send();

我们也可以使用同样的手法来对待异常(exceptions)。如果在try 区段内「可能引发异常」的语句之后,以及所有catch 区段之内,都重复执行了同一段代码,我就 可以将这段重复代码移到final 区段。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值