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();

动机

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

作法

1. 鉴别出[执行方式不随条件变化而变化]的代码

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

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

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

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

 

你可能遇到这样的代码:

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();

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值