如有以下例程:
public int addTest(int a, int b, int c, int d)
{
int total = 0;
/*
对total的若干处理程序
*/
if (a != 0) total += a;
if (b != 0) total += b;
if (c != 0) total += c;
if (d != 0) total += d;
return total;
}
public int addTwo(int aa, int bb)
{
return addTest(aa, bb, 0, 0);
}
public int addThree(int aaa, int bbb, int ccc)
{
return addTest(aaa, bbb, ccc, 0);
}
原来我们可以分别写两个模块,一个加两个数字,一个加三个数字的,这样不用判断是否存在数值,而现在只写一个总的功能模块,然后通过条件判断是否存在数值再做加运算。通过重载调用总模块
我的问题是,如果条件判断增加到几十个if语句,那么会不会影响程序的执行效率。
如果分开处理,不同的模块又出现了相同的代码只是小部分代码不同。应该要如何来平衡执行效率、代码清晰和代码冗余的问题!?
就算 a 等于0,加上0 也不会有影响
这段程序只是我例举的一个例子,一个运行模式而已
看不懂,为何要两数相加,三数相加,可以用数组、list作为源,然后循环加入,就像一开始学累加程序一样。
这段程序只是我例举的一个运行模式而已,实际问题并非如此简单,确实是要经过层层判断
在这种情况下,使用switch跳转语句效率会高一些。if逐行判断,switch则通过break跳转。你输入一个参数比较多的,逐行调试比较下两者区别。
switch只能针对一个变量进行选择分支,而我的这段程序里是有若干个变量需要判断的。
这种模型应该使用模板,如果只是判非0完全没必要,如果是其它数值就要看该代码的执行频率,如果不是热点完全没必要优化,如果是热点就要考虑cpu流水线问题。
感谢你的回复,很有参考价值
客观的讲,没有必要非得把两个模块的函数,改装到一个模块,如果你只是想单纯的提高一些执行效率。
代码的可读性,可扩展性,层次性,是好多个方面的。
实际中的函数本身执行,不会耽误很多时间,又不会出现一分钟几十万的访问量,去执行这个函数。
不要为了节省不到1分钟的执行效率,去降低代码的可扩展性,
增加日后,调试,扩展的工作量。
但如果不整合到一个模块,出现太多的代码冗余又该怎么处理呢
if (a != 0) total += a;
if (b != 0) total += b;
if (c != 0) total += c;
if (d != 0) total += d;
其实这个a,b,c,d就算是0,然后不判断,直接相加,又没有什么错误
唉,这个只是我例举的代码形式并不是实际代码。我是问如果N个模块,功能差不多,就是一小部分不同,整合到一个模块又会增加很多的判断语句。在这样的情况下,如何平衡,是要选择分布成N个模块而牺牲代码冗余加大程序的大小,还是选择整合到一起增加条件判断,牺牲程序的执行效率
明白你的意思了。我觉得在实际的多写几个if判断是没有问题的,cpu判断是非的效率是很高的。这里 一篇解决类似问题的博客,可能在你这里不适用,但是是一种思路。
哈,有用,正好我也在做接口的东东
@kevinwang32: 呵呵,那篇文章是我写的,可能写的有点儿简陋,不清楚的地方或者您有更好的方法,我们可以交流。
@jone_e:兄弟,怎么联系你呀
@kevinwang32: 就在博客园。