在下面的伪c代码片段中应避免重复代码的方法是什么?

时间:2015-10-20 09:50:08

标签: c algorithm

if(var == something) {
    A();
    B();
} else if(var == something_else) {
    A();
    B();
    C();
} else {
    assert(false);
}

如何在if个案例中避免重复调用A()和B()的代码。我应该使用像

这样的开关盒吗?
switch(var) {
case something:
case something_else:
    A();
    B();
    break;
}
if (var == something_else)
   C():

什么是更好的解决方案? switchif else之间是否存在性能损失?

4 个答案:

答案 0 :(得分:6)

if (var == something || var == something_else) {
    A();
    B();
}

if (var == something_else) {
    C();
}

如果您还需要else,则可以执行以下操作:

if (var == something || var == something_else) {
    A();
    B();

    if (var == something_else) {
        C();
    }
} else {
    assert(false);
}

关于你的问题,

  

switch if if else是否有任何性能损失?

请阅读此问题的答案:

Is 'switch' faster than 'if'?

简而言之,通常不存在任何明显的差异。因此,您应该在考虑可读性的情况下编写代码。在if/elseswitch之间,只需选择更自然的内容。

答案 1 :(得分:2)

由于呼叫顺序无关紧要,请尝试以下方法:

switch(var) {    
    case something_else:
        C();
    case something:
        A();
        B();
    break;
    default:
        assert(false);
    break;
}

答案 2 :(得分:2)

您可以使用嵌套的if语句,如下所示:

If (var == something || var == something_ese) {
    A();
    B();
    If (var == something_else) { C(); }
}
Else
{
    Assert(false);
}

答案 3 :(得分:1)

我建议将assert和作品分开:

assert(var == something || var == something_else);

A();
B();
if(var == something_else) {
    C();
}

这不仅避免了AB调用的重复,而且在开头指定先决条件时也使其更具可读性。