What should be the approach to avoid duplicate code in below pseudo c code snippet?
1 2 3 4 5 6 7 8 9 10 | if(var == something) { A(); B(); } else if(var == something_else) { A(); B(); C(); } else { assert(false); } |
在两个
1 2 3 4 5 6 7 8 9 | switch(var) { case something: case something_else: A(); B(); break; } if (var == something_else) C(): |
更好的解决方案是什么?在
1 2 3 4 5 6 7 8 | if (var == something || var == something_else) { A(); B(); } if (var == something_else) { C(); } |
如果您还需要
1 2 3 4 5 6 7 8 9 10 | if (var == something || var == something_else) { A(); B(); if (var == something_else) { C(); } } else { assert(false); } |
关于你的问题,
Is there any performance penalty in switch vs if else?
请阅读此问题的答案:
"switch"是否比"if"快?
简而言之,通常不会有任何明显的差异。因此,您应该在编写代码时考虑到可读性。在
您可以为此使用嵌套的if语句,如下所示:
1 2 3 4 5 6 7 8 9 | If (var == something || var == something_ese) { A(); B(); If (var == something_else) { C(); } } Else { Assert(false); } |
由于主叫顺序无关紧要,请尝试以下操作:
1 2 3 4 5 6 7 8 9 10 11 | switch(var) { case something_else: C(); case something: A(); B(); break; default: assert(false); break; } |
我建议将
1 2 3 4 5 6 7 |
这不仅避免了