前一段时间,在项目里遇到这样一个问题。
我提供了一些函数,比如A(),B(),C().....。之后其他人根据具体情况调用不同的函数。这些函数有一个
共同点,就是调用方式非常相似。
使用者可能会这样使用这些函数
if(condition == 1) A();
else if(condition == 2) B();
else if(condition == 3) C();
else ...
现在是看不出来有什么问题。但是问题在于调用函数没有这么简单,举一个复杂点的例子。 使用者可能这样使用if(condition == 1)
{ do{ if(condition2) break; A(); if(condition3 && condition4) { //do some code... } }while(condition1)}elseif(condition == 2){ do{ if(condition2) break; B(); if(condition3 && condition4) { //do some code... } }while(condition1) }else ...以上只是为了说明,每种情况的处理方法都差不多,但是都很复杂,有那么多得条件和操作。
现在出现问题了,调用者总会用错这些条件,比如condition2成立应该跳出循环,但是忘记break了。
或者又有其它的一些错误。总之即使调用A的情况弄对了,有的时候就偏偏忘记改调用B的那段代码。
导致问题总是接连不断的出现。
当然,有人说了,你这个明显有重复代码,改成参数化不就行了。
可以改成这样:void func(int condition)
{ if(condition == 1) A(); else if(condition == 2) B(); else ...}之后上面那段洛里啰嗦的代码就可以这样改
do{ if(condition2) break; func(condition); if(condition3 && condition4) { //do some code... }}while(condition1)。但是关键的这个func函数应该由谁来提供呢?一开始我只是提供了A,B,C...这些函数,我本以为使用者
可以自己写一个func函数,但是我错了,使用者并没有这么做,而是赤裸裸的按照最笨的那种方法。当我
发现时,已经晚了,程序中到处都是这样的代码,以至于我苦不堪言。虽然单独提供A,B,C...可以使程序
更加灵活(万一使用者对函数有了不同的使用情况),但是到现在为止没有出现什么特例的使用情况。
而我也非常后悔,为什么自己不在当初提供一个参数化的方法。