我如何"打破"if语句?

Wes*_*Wes 62 c++

我有一个if语句,我想"打破"出来.我知道休息只是为了循环.有人可以帮忙吗?

对于那些需要我想要做的事情的例子:

if( color == red )
{
...
if( car == hyundai ) break;
...
}
Run Code Online (Sandbox Code Playgroud)

pho*_*oog 61

嵌套ifs:

if (condition)
{
    // half-massive amount of code here

    if (!breakOutCondition)
    {
        //half-massive amount of code here
    }
}
Run Code Online (Sandbox Code Playgroud)

被淹没的风险 - 过去发生在我身上 - 我会提到另一个(不受欢迎的)选择当然是可怕的goto; 一个破坏声明只是一个伪装的转向.

最后,我会回应一下你的设计可能会得到改进的普遍观点,这样就不需要大量的if语句,更不用说打破它了.至少你应该能够提取几个方法,并使用一个返回:

if (condition)
{
    ExtractedMethod1();

    if (breakOutCondition)
        return;

    ExtractedMethod2();
}
Run Code Online (Sandbox Code Playgroud)

  • `goto`看起来很嵌套 - 嵌套 - 如果嵌套后if. (14认同)
  • 如果由于可变范围原因你不能调用另一个函数,`goto`是一个很好的解决方案. (9认同)
  • 将块重构为函数不仅有助于提高可读性,还可能解决原始问题. (6认同)
  • @AdamS 这在很大程度上是正确的——尤其是当你的字体很大或者你的代码编辑器窗口很窄时。然而,与添加嵌套的 if 语句相比,添加 goto 往往会导致推理例程的难度更快增加。所以在一个复杂的方法中,我可能更喜欢易于理解控制流而不是清洁度。 (2认同)

Mat*_*ips 40

if (test)
{
    ...
    goto jmp;
    ...
}
jmp:
Run Code Online (Sandbox Code Playgroud)

哦,为什么不:)

  • @Yuck Nice相关用户名.至于滑稽,有点但我会说,如果你的设计迫使你开始使用OP,那么使用goto不会让它变得更糟.另外,phoog在他的获奖答案中指出,嵌套条件实际上只是表面上的不同. (18认同)
  • goto 的问题不在于最初的实现。在增强过程中,另一个开发人员不知不觉地在 if 大括号末尾和 jmp: 语句之间添加了一些语句。 (2认同)
  • @MandeepSingh 是否有可能编写代码来防止开发人员用它做不道德的事情?即使他们用它做了愚蠢的事情,他们也很可能经常在代码的其他部分做更愚蠢的事情。 (2认同)

小智 20

您可能需要将if语句分解为更小的部分.话虽这么说,你可以做两件事:

  • 将声明包装成do {} while (false)并使用真实break(不推荐!!!巨大的kludge !!!)

  • 将语句放入其自己的子例程并使用return这可能是改进代码的第一步.

  • 我已经看过使用`do/while`技术,我不一定认为它是一个很好用的kludge并且避免了`goto`可能引入的问题(例如试图跳过变量初始化) (6认同)