// This is just something a came up to explain my question
switch(a)
{
case 2:
if(x >= 1)
{
dosomething();
break;
}
else
{
dosomethingelse();
break;
}
default:
break;
}
或者像这样:
switch(a)
{
case 2:
if(x >= 1)
{
dosomething();
}
else
{
dosomethingelse();
}
break;
default:
break;
}
break
是否应该在if / else语句中或在这些语句之外?是否有正确的方法或无所谓?
答案 0 :(得分:3)
我会选择第二个选项,因为case语句确实有一个休息时间会更清楚。
如果您在if中有中断,通常会将案例陈述短路,因此它不会继续执行。但是,要小心短路,因为它可能会使事情更容易混淆/容易出错,并且往往是在交换机中做太多事情的症状。
答案 1 :(得分:2)
两者都是正确的,但最好像第二个那样做,因为你应该在每个案例陈述之后立即休息。此外,它往往具有更易读且易于管理的代码,因为您可能稍后更改if
部分,从而丢失break
。
所以你可以这样做:
switch(a){
case 1:
if( a > b ){
// do something
}else{
//do some other thing
}
break;
case 2:
if( a > c ){
// do something
}else{
//do some other thing
}
break;
default
break;
}
答案 2 :(得分:1)
一般情况下,第二个选项将是首选,有些时候全部取决于您的业务测试用例。如果有多个if else梯形图,将使用开关案例,以提高代码的效率和可读性。现在回答您的问题break be inside of the if/else statements or outside?
场景1:如果你的块中只有if和else,那么break并不重要。无论如何只会执行一个bock。
场景2:无论条件块内的条件如何,都要执行一些代码,然后必须在结束时放置。
Ex。
switch(a)
{
case 2:
if(a >= 1)
{
dosomething();
}
else
{
dosomethingelse();
}
doSomethingForthisCase();
break;
default:
break;
}
你还可以想到更多的场景,比如在其他地方和最后一段时间内打破。在这种情况下,如果条件满足则执行doSomethingForthisCase();
,否则只执行其他块,等等。
答案 3 :(得分:0)
如上面的答案中已经提到的,第二选项将是优选的,因为可以避免重复中断。但是,我还建议不要违反默认值。默认情况下往往是最后执行的选项。
答案 4 :(得分:0)
一般来说,你需要1个退出点,所以等权重的if / else链应该在底部有中断。
if(a >= 1)
{
dosomething();
}
else
{
dosomethingelse();
}
break;
常见的例外是在执行操作之前预先测试错误条件和爆发。
if(a < 1)
{
handle_error();
break;
}
dosomething();
break;
答案 5 :(得分:0)
它们都可以工作,但定义第二种选择就是这样做。第一个它打破了逻辑结构,而且从来都不是一个好的做法。