1. 聚能聊>
  2. 话题详情

探讨三种方式哪种效率高、可读性、可维护性好: if-else、switch、和另外一种

我们现在有一个参数 type,需要根据 type 进行相应的代码处理( type 大概有 20+ 种情况),用题目中的三种方式如下

if-else 方式

if (type == 'type1') {
    // todo something
} else if (type == 'type2') {
    // todo something
}
...
else if (type == 'typeN') {
    // todo something
} else {
    // otherwise
}

switch 方式

swtich(type) {
    case 'type1': /* todo something */ break;
    case 'type2': /* todo something */ break;
    ...
    case 'typeN': /* todo something */ break;
    default: /* otherwise */ break;
}

另外一种(我不知道这叫什么方式)

static {
    // 这里的 put 可以通过别的方式装载,可以一次性写好了之后,需要扩展时主动添加到 map 里面(也可以用注解注入等方式)
    map.put('type1', new Type1Process())
    map.put('type2', new Type2Process())
    ...
    map.put('typeN', new TypeNProcess())
    map.put('default', new DefaultProcess())
}
proc = map.containsKey(type) ? map.get(type) : map.get('default')
proc.exec()

从执行效率、可读性、可维护性等多个方面来看,哪种方式综合评分更高?

上面代码可能颜色不清楚,可以看下面这个图
image

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    阿里云代金券 x 1

20个回答

2

黄二刀 复制链接去分享

可读性if-else最好,可维护性switch最好,执行效率static最好
if-else条件一多就和读天书一样,static消耗资源,所以20+的判断我首选switch

0

阿靖哦 复制链接去分享

条件过多,还是用switch吧

0

shawn2046 复制链接去分享

首先不用考虑效率,这点效率提升微不足道,写业务代码应该更多考虑可维护性和可读性
如果分支不多,if-else可读性和可维护性更好
但是如果分支比较多,那么switch可读性更好
switch容易出现漏掉break的问题

0

1658458755422780 复制链接去分享

switch可读性最好,但是条件匹配类型有限制
if-else是最常规的方法,在switch不满足的情况下可以采用
最后一种不建议

0

1658458755422780 复制链接去分享

switch可读性最好,但是条件匹配类型有限制
if-else是最常规的方法,在switch不满足的情况下可以采用
最后一种不建议

0

nss2vrqscf54k 复制链接去分享

if-else可读性在少于5个的情况下比较好,多了很头大,
switch case比if else的可读性好一点
最后一种static,本质是策略模式的应用,可维护性是最好的,但是会占用一点空间

0

君浩 复制链接去分享

效率在这里是不需要考虑的,这点效率的节省没有意义。

至于可维护性和可维护性,则具体情况具体分析:
如果是非常简单的字符串匹配,用switch
如果是复杂一点的逻辑处理,用if else
如果是特别复杂的逻辑,用第三种方式,类似于策略模式

0

numb623 复制链接去分享

switch最好,case条件是同一维度,可读性强
if else条件比较灵活,条件比较随意,扩展性不好
最后种不建议

0

1556799415322662 复制链接去分享

可读性if else最高,效率来看,都差不多,目前编译器自动优化很牛逼了,最终优化的字节码基本都是一样

0

逗逗逗 复制链接去分享

建议使用switch,但要封装一个factory,代码可读性更高

0

t.s.f.h 复制链接去分享

可读性:如果执行逻辑简单,感觉switch更好;如果复杂,感觉if-else更好。

0

游客552f7eqdr2eqg 复制链接去分享

ifelse就算了
switch比较合适 如果每一个case单独接一个函数其实和第三种方式没什么区别
static这种与其说合适 不如说更适合结合配置文件自动生成 在流程比较健全的开发工作中可以推广
但如果是规模不大的小业务 switch足矣

0

mqtq 复制链接去分享

就这三种而言,switch更好,另外这种模式建议搞个策略工厂模式来写

0

叶应是叶 复制链接去分享

可读性我认为 switch 最高,且由于 switch 要求比较的属性类型一致,在编译期就可以对其进行优化

0

aoteman675 复制链接去分享

20+的选择switch,效率高。

0

helloworld0001 复制链接去分享

ifelse可读性最差。个人会选择第三种,通过多态来实现,代码优雅,可读性强。

0

八面道君 复制链接去分享

switch应该是比较适合的

0

NoName999 复制链接去分享

20+种情况首先淘汰第1种if-else方式,可读信差,可维护性也不好
效率方面,三种方式比较的空间复杂度依次是:O(n)、O(1)、O(1)
如果第2种switch-case方式的处理函数也封装成Type1Process()、Type2Process()...可读性和可维护性将和第3种一样

0

夜明孤行灯 复制链接去分享

效率高的大概率是switch,因为生成的是”跳转表“
可读性的话看处理逻辑复杂不,如果不复杂,switch可读性可以,如果处理逻辑很复杂,方案三比较好。
可维护性的话switch条件明确,和方案三差不多,只是如果代码需要大量重用,方案三的可维护性好一些。

0

小超555 复制链接去分享

我也认为可读性if-else最好,毕竟顺序往下,不过套多了真的是。。。
switch维护好,可以很多条件
static没用过啊。。。我已经落伍了嘛