什么是用if语句打破案例的正确形式?

时间:2015-12-26 02:45:18

标签: c

你会这样写的吗:

// 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语句中或在这些语句之外?是否有正确的方法或无所谓?

6 个答案:

答案 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)

它们都可以工作,但定义第二种选择就是这样做。第一个它打破了逻辑结构,而且从来都不是一个好的做法。