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

Gee*_*kyJ 4 c algorithm

if(var == something) {
    A();
    B();
} else if(var == something_else) {
    A();
    B();
    C();
} else {
    assert(false);
}
Run Code Online (Sandbox Code Playgroud)

在两种if情况下,如何避免调用A()和B()的代码重用.我应该使用开关盒,

switch(var) {
case something:
case something_else:
    A();
    B();
    break;
}
if (var == something_else)
   C():
Run Code Online (Sandbox Code Playgroud)

什么是更好的解决方案?switchvs中是否存在性能损失if else

Dmy*_*nko 6

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

if (var == something_else) {
    C();
}
Run Code Online (Sandbox Code Playgroud)

如果你还需要else,你可以这样做:

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

    if (var == something_else) {
        C();
    }
} else {
    assert(false);
}
Run Code Online (Sandbox Code Playgroud)

关于你的问题,

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

请阅读这个问题的答案:

'switch'比'if'快吗?

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