我有一个if语句,我想“突破”。我知道中断只是为了循环。有人可以帮忙吗?
对于那些需要我尝试做的事的例子:
if( color == red )
{
...
if( car == hyundai ) break;
...
}
我有一个if语句,我想“突破”。我知道中断只是为了循环。有人可以帮忙吗?
对于那些需要我尝试做的事的例子:
if( color == red )
{
...
if( car == hyundai ) break;
...
}
switch块;他们确实支持突破。
goto尽管不建议这样做
Answers:
嵌套的ifs:
if (condition)
{
// half-massive amount of code here
if (!breakOutCondition)
{
//half-massive amount of code here
}
}
冒着被否决的危险-过去我曾发生过-我会提到,另一个(不受欢迎的)选择当然是可怕的goto;break语句只是变相的结果。
最后,我会回应一种普遍的看法,即可以改进您的设计,这样就不需要大量的if语句,更不用说打破它了。至少您应该能够提取两种方法并使用return:
if (condition)
{
ExtractedMethod1();
if (breakOutCondition)
return;
ExtractedMethod2();
}
condition,并根据需要添加新代码,以便在满足条件时输入的代码块对应于OP原始想法中断之前应执行的代码。这将在您的例子只是调用一个方法,它可以再调用condition2,condition3等需要的块。
goto如果由于可变范围的原因而您不能调用另一个函数,则是一个很好的解决方案。
goto看起来好像在嵌套if之后嵌套了很多清理器。
goto与添加嵌套if语句相比,添加趋向于导致对例程进行推理的难度更加迅速地增加。因此,以一种复杂的方法,我可能会更喜欢易于理解控制流而不是清洁度。
if (test)
{
...
goto jmp;
...
}
jmp:
哦,为什么不:)
您可能需要将if语句分解为较小的部分。话虽如此,您可以做两件事:
将语句包装do {} while (false)并使用real break(不推荐!!!!!!!!)
将语句放入自己的子例程中并使用return这可能是改进代码的第一步。
do/while使用的技术,我不一定会认为它很好用,并且避免了goto可能引入的问题(例如,尝试跳过变量初始化)
goto,并且非常接近“按我的意思做”的东西
总会有一个goto声明,但是我建议嵌套一个if带有中断条件倒数的。
您可以使用goto,return或致电abort (),exit ()等等。