是否存在一种标准的结构化编程模式,以防止在以下情况下重复(如C所示)?
if(/* … */) process(foo,bar,baz,0);
else if(/* … */) process(foo,2);
else if(/* … */) process(foo,5);
/* else don’t process() */
将变化的值存储在变量中并在以后进行调用是显而易见的方法,但是在最终情况下需要跳过该调用,这可以通过几种笨拙的方式来实现:
额外标志变量
int arg;
bool go=true;
if(/* … */) arg=0;
else if(/* … */) arg=2;
else if(/* … */) arg=5;
else go=false;
if(go) process(foo,arg);
无效值(如果存在)
int arg=-1;
if(/* … */) arg=0;
else if(/* … */) arg=2;
else if(/* … */) arg=5;
if(arg>=0) process(foo,arg);
无意义循环
do {
int arg;
if(/* … */) arg=0;
else if(/* … */) arg=2;
else if(/* … */) arg=5;
else break;
if(go) process(foo,arg);
} while(false);
冗余测试
int arg;
if(/* … */) arg=0;
else if(/* … */) arg=2;
else if(/* … */) arg=5;
if(/* … */ || /* … */ || /* … */)
process(foo,arg);
无法形容的邪恶
int arg;
if(/* … */) arg=0;
else if(/* … */) arg=2;
else if(/* … */) arg=5;
else goto skip;
process(foo,arg);
skip:;
是否有更好的,广泛应用的选择?想到了Python的else
on循环,但不能很好地放在if
上! (Python还使用functools.partial
处理了这种特殊情况,但这不适用于语句。)