大量 if-else 的函数重构

2021-11-22 11:16:33 +08:00
 linquan
语言是 c#,代码中有很多 if-else 的判断语句,就像这样:if (x==1) then func1... if (x==2) then func2... ...像这样有几十个。虽然看起来还算清楚,但是想用一种更加高效率的方式完成,能够减少代码量,或者提高运行速度。目前想到的是做一个 x 和 func 的映射,例如 map 等,然后这样时间复杂度就变成了 logn 。请问有没有更好的方法?
3623 次点击
所在节点    问与答
26 条回复
MatDK
2021-11-22 16:55:17 +08:00
你可以做 1 个 functionarray[n]={func0,func1,..../}
然后按直接 functionarray[x](params)就行了....
PiersSoCool
2021-11-22 16:59:10 +08:00
刚工作:不知道

工作 1 年:策略模式

工作 N 年:只要能看懂,写起来不麻烦就行
kisshere
2021-11-22 17:17:25 +08:00
DrakeXiang
2021-11-22 17:48:27 +08:00
不考虑性能,几十个 if else 我看着也受不了。。
tool2d
2021-11-22 18:26:32 +08:00
函数里光是多个 if ,代码也挺好理解的。

就是 else 必须少用。

C++会把大型 switch case 优化成二分查找,相当于 map 的 logn ,但是恕我直言,这对性能压根不重要。除非代码是自动生成的几百几千个 IF ,那另说。
c0xt30a
2021-11-22 23:20:59 +08:00
对我来讲,这样直白的代码

```
int func( int i )
{
return i == 1 ? func1( i ) :
i == 2 ? func2( i ) :
i == 3 ? func3( i ) :
i == 4 ? func4( i ) :
i == 5 ? func5( i ) :
0;
}
```

比逻辑与数据分离的表驱动代码更好一点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/817071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX