C 优化开关箱代码
我的代码中有下面的开关盒C 优化开关箱代码,c,switch-statement,code-duplication,C,Switch Statement,Code Duplication,我的代码中有下面的开关盒 switch(condition) case 'A' : //Code part A break; case 'B' : //Code part A //Code part B break; case 'C' : //Some code break; 代码部分A在“A”和“B”两种情况下都重复。我想避免代码重复
switch(condition)
case 'A' :
//Code part A
break;
case 'B' :
//Code part A
//Code part B
break;
case 'C' : //Some code
break;
代码部分A在“A”和“B”两种情况下都重复。我想避免代码重复
如果我们使用fall-though,那么我们需要为情况B添加If条件。这是避免代码重复的唯一方法吗?不幸的是,这是唯一的方法,除了为
部分a
定义函数之外
您可以通过从组合的案例
标签内部退出开关
来减少嵌套,以使代码看起来更加统一:
switch (someValue) {
case 'A':
case 'B':
// Code part A
if (someValue == 'A') break;
// Code part B
break;
case 'C':
break;
}
这使您的A部分和B部分代码具有相同的嵌套级别。是否可以在“//A部分代码”之前执行“//B部分代码”?如果是这样的话,您可以对它们重新排序,让它在没有If条件的情况下通过
除此之外,我认为没有其他事情可做。创建面向对象语言的原因之一是避免在命令式语言中重复代码。如果顺序不重要,您可以简单地执行以下操作:
switch (condition)
{
case 'B':
// Code part B
// no break
case 'A':
// Code part A
break;
...
}
case'B'
将通过case'A'
代码继续执行,因为您没有调用break
操作switch语句以减少代码重复起初可能会起作用,但随后您可能会向交换机添加额外的case,这可能会破坏优化的清洁度。例如:
switch(condition)
case 'A' :
// Code part A
break;
case 'B' :
// Code part A
// Code part B
break;
case 'C' :
// Code part C
break;
case 'D' :
// Code part A
// Code part D
break;
突然间,一个当时看起来不错的优化开始变得难以维护、难以阅读和容易出错
在我看来,已经确定存在公共代码的情况下,最干净的响应是编写函数来执行公共代码和来自每种情况的调用。今后,这将继续保持下去。如果A部分和B部分的顺序不重要,但可能是最不难看的替代方案,则这一点可以起作用:)