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

7个回答

2

黄二刀 复制链接去分享

可读性if-else最好,可维护性switch最好,执行效率static最好
if-else条件一多就和读天书一样,static消耗资源,所以20+的判断我首选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没用过啊。。。我已经落伍了嘛