if-else-if阶梯分支的通用代码

是否存在一种标准的结构化编程模式,以防止在以下情况下重复(如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处理了这种特殊情况,但这不适用于语句。)

lx463419 回答:if-else-if阶梯分支的通用代码

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2510287.html

大家都在问