2015-10-20 50 views
3
if(var == something) { 
    A(); 
    B(); 
} else if(var == something_else) { 
    A(); 
    B(); 
    C(); 
} else { 
    assert(false); 
} 

如何避免在if这两种情况下调用A()和B()的代码重用。我是否应该使用开关盒,在下面的伪c代码片段中,应该避免代码重用的方法是什么?

switch(var) { 
case something: 
case something_else: 
    A(); 
    B(); 
    break; 
} 
if (var == something_else) 
    C(): 

什么是更好的解决方案? switch vs if else是否有任何性能损失?

+1

呼叫顺序是否重要? –

+0

@ rakeb.void,No – JagsVG

+0

您给出的例子非常简单,似乎在这种情况下尽量减少代码重用是不值得的。它只会让代码更难阅读。 – user694733

回答

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); 
} 

在问候你的问题,

是否有开关的任何性能损失VS如果别的吗?

请阅读这个问题的答案:

Is 'switch' faster than 'if'?

总之,通常不会有任何明显的差异。所以你应该在编写代码时考虑到可读性。在if/elseswitch之间,只要选择更自然的东西。

+0

'else'呢? –

+0

@ rakeb.void谢谢,编辑 –

2

由于调用顺序没关系,试试这个:

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

if语句可以使用嵌套对于这一点,就像这样:

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

我会建议分离assert和工作:

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

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

不仅可以避免重复AB调用,但也使得它更易于阅读,因为您可以在开始时指定前提条件。