"滥用"循环以减少if-nesting

Val*_*itz 5 c++

有时必须执行一系列if/else检查.在过去的日子里,goto是为此而准备的沙漠仪器.

由于goto在许多代码风格指南中是禁止的,我有时会使用循环作为替代,例如:

do
{
  if (a)
  {
   doA();
   break;
  }
  //...
  if (z)
  {
   doZ();
   break;
  }
}while(false);

//all break jump here
Run Code Online (Sandbox Code Playgroud)

这是一个好方法吗?是否有一个好的C++模式(例如使用模板,继承等)来实现它而不需要太多开销?

Jar*_*d42 7

由于条件似乎无关,else if是一个选项:

if (a) {
    doA();
} else if (b) {
//...
} else if (z) {
    doZ();
}
Run Code Online (Sandbox Code Playgroud)


ypn*_*nos 5

通常,对于编写可维护代码,您应该按照预期的方式使用该语言的工具.你对一个循环进行一次循环的循环的使用显然是一个偏差,而不是一开始就皱眉的那套代码风格指南goto.

该语言中提供了一些工具,使您可以更轻松地与其他程序员和您进一步了解您打算在此处做什么.

  • 其中之一是将此代码块外包到一个单独的方法中并使用该return语句.一些人也不赞成有趣的早期回报.
  • 另一个解决方案可能是使用异常,您尝试/ catch.它是否适合您的目的主要取决于您正在进行的"检查"类型.
  • 最后,if/else链可能看起来不是很优雅,但另一方面是一个构造,几乎没有留下误解的余地.

  • 使用异常来模拟goto通常被认为与使用goto一样糟糕. (5认同)