如果没有得到,我怎么能干净利落?
loop:
if(condition1){
something();
} else if (condition2) {
somethingDifferent();
} else {
mostOfTheWork();
goto loop;
}
我也不想使用休息时间。此外,在做其他事情之前,预计会循环几次(前40次),因此即使只是为了可读性,最多的工作部分很可能会尽可能高。提前谢谢。
编辑:这是在错误的概念下发布的,编译器优化器在休息时效果不佳,虽然开始时通常很愚蠢,但事实证明我对自己不正确 通过实验(表现)。另一方面,谢谢你的答案;他们对不同风格的阅读很有趣。
答案 0 :(得分:10)
bool done = false ;
while( !done ) {
if(condition1){
something();
done = true ;
} else if (condition2) {
somethingDifferent();
done = true ;
} else {
mostOfTheWork();
}
}
答案 1 :(得分:10)
显然,如果任何一种情况发生,你都会退出循环。
while ((!condition1) && (!condition2)) {
MostOfTheWork();
}
if (condition1) {
something();
} else if (condition2) {
somethingDifferent();
}
所以,当两个条件都没有被触发时循环,然后看看哪一个让你。
现在,有人会尖叫我评估的条件超出了我的需要 至。为了他们的利益,修改后的版本:
{
bool t1, t2;
while ((!(t1 = condition1)) && (!(t2 =condition2))) {
MostOfTheWork();
}
if (t1) {
something();
} else if (t2) {
somethingDifferent();
}
}
答案 2 :(得分:2)
没有休息?
function foo(){
if(condition1){
something();
return;
} else if (condition2) {
somethingDifferent();
return;
}
mostOfTheWork();
foo(); //(Tail recursive for those worried about stack overflows)
}
但是,有流量控制的休息时间,它们比goto更清楚,所以我建议使用它们。但是在这种情况下,我会建议@ John的answer作为正确的方法。
答案 3 :(得分:1)
没有笨蛋或喙。一如既往的清洁,主观
do {
if ( condition1 )
something();
else if( condition2 )
somethingElse();
else
mostOfTheWork();
} while( !(condition1 || condition2) );
这当然是非常愚蠢的。请休息一下。
答案 4 :(得分:1)
CS教授可能已经把它钻进了你的脑海,这很糟糕,会对你的代码造成严重破坏。如果正确而有目的地使用,Gotos实际上非常有效。这就是为什么大多数编程语言都没有删除它。
在您的特定情况下,goto很好,因为代码块很小,您可以轻松查看程序流程。您也可以使用其他控制结构编写意大利面条代码,尽管这样做有点困难。
答案 5 :(得分:0)
由于您没有具体说明某种语言,因此某些语言可以使用continue
,next
或skip
代替goto
。
答案 6 :(得分:0)
do
{
if(condition1){
something();
} else if (condition2) {
somethingDifferent();
} else {
mostOfTheWork();
}
} while (!condition1 && !condition2)
答案 7 :(得分:0)
在我看来,这个版本的代码最清楚地将程序流程传达给后代,并且是最容易扩展的。是的,我正在使用break
。我无法想到任何真正的理由。
while(true)
{
if (condition1)
{
something();
break;
}
if (condition2)
{
somethingDifferent();
break;
}
mostOfTheWork();
}
如果您真的不想使用break
,可以使用goto
退出循环,或使用return
取消该功能(如果这个循环是你必须重构的更大函数的一部分。
while(true)
{
if (condition1)
{
something();
goto exit;
}
if (condition2)
{
somethingDifferent();
goto exit;
}
mostOfTheWork();
}
exit:
或者
while(true)
{
if (condition1)
{
something();
return;
}
if (condition2)
{
somethingDifferent();
return;
}
mostOfTheWork();
}
如果你拒绝使用除if和while之外的任何流量控制,那么这个怎么样:
bool ok = true;
while(ok)
{
if (condition1)
{
something();
ok = false;
}
if (ok && condition2)
{
somethingDifferent();
ok = false;
}
if (ok)
{
mostOfTheWork();
}
}
此外,请参阅my canonical answer了解此类问题(并投票支持!)