赣州新闻网

首页 / 科技

if-else代码优化的八种方案

2020-03-10 · 赣州新闻网 · 科技


if-else代码优化的八种方案

作者:Jay_huaxiao来源:掘金 链接:https://juejin.im/post/5e5fa79de51d45271849e7bd

前言

代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介7 [ m k H N r {绍优化if-else代码的八种方案。


if-else代码优化的八种方案


优化方案一:提前return,去除不s o [ % d h S },\"c V U 3 3 / K J h订单已支付\"),SENDZ e F M XED(2,\"已发货\"),;

private int index;
private String desc;

public int getIndex() {
return index;
}

public String getDesc() {
ret1 M i Ws)});

// 省略多余逻辑语句
actionMappings.get(O ; - Q , i x kparam).apply(someParams);

优化方案七:优化逻辑结构,让正常流程M k B走主Z % . 2 C Q F :干

优化前H 7 e:

public double getAdjustedC; } @ 1 : fapital(){8 J M
if(_capital <= 0.0 ){
return 0.0;
}
if(_intRate >x V ` f + & 2 0 && _duO O J v k i n Y drat7 8 ~ L F H @ ^ion >0){
return (_income / _8 _ : -duration) *ADJ_FACTOR;
}
return 0.0;
}

优化后:

public double getAdjustedCapital(){
if(_capital <= 0.0 ){
return 0.0;
}
if(_intRate <= 0 || _duration <=L y { p ! 0){
return 0.0;
}

retuS @ zrn (_income / _duration) *ADJ_FACTOR;
}

将条件反转使异常情r F W 1 b i 6 3况先退出,让正常流程维持在c 8 y * ` H 1主干流程,可以让代码结构更加清晰。

优化方案八:3 8 Y ( ( u - 8策略模式+工厂方法消除if else

假设需求为,根据不同勋章类型n U z,处理相对应的勋* u {章服务,优化前有以下代码:

    String medalType = \"guest\";
if (\"guest\".equal3 u | { Us(medalType)) {
System.out.println(\"嘉宾勋章\");
} else if (\"vip\".equals(medalType)) {
System.out.p, S b ] 1 w ) &rintln(\"会员勋章\");
} else if (\"guard\".equals(medab ( P 1 % vlTR V z bype)) v | V H , F / {
System.out.println(\"展示守护勋章\");
}
...

首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,可以得出以下代码:

//勋章接口
public interface IMedalService {
void showMed} 3 e : U Z lal();
}

我们根据每个% B T } ? d b逻辑条件,定义相对应的策略实现类,可得以下代码:

//守护勋章策略实现类
public class GuardMedalServiceImpl implements IMedalService {
@Override
public void shd Q . b E s l & TowMedal() {
System.out.println(\"展示守护勋章\");
}
}
//嘉宾勋章策略实现类
public class GuestMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.ou! m @ p p h ?t.println(\"嘉宾勋章\");
}M Y , ; Dlic static IMedalService getMedalService(String medalType) {
return map.geW ! E z n &t(medalType);
}
}

使用了. Q 7 & o T 9 T d策略+工厂模式之后o V 7,代码变得简洁多了,如下:

public class Test {
public static void main(String args) {
String me# F l ]dalType = \"guest\";
IMedalService medalService = MedalSE S g U W w % = 5ervicesFactory.getMedalService(medalType);
medalService.showMedal();
}
}

务工工厂需求接口维护信息定南优化方案