我的代码中有以下开关案例。
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,那么我们需要为case B添加if条件。这是避免重复代码的唯一方法吗?
答案 0 :(得分:4)
如果订单不重要,您只需执行以下操作:
switch (condition)
{
case 'B':
// Code part B
// no break
case 'A':
// Code part A
break;
...
}
case 'B'
将继续执行case 'A'
代码,因为您没有调用break
。
答案 1 :(得分:4)
操作switch语句以减少代码重复可能会起作用,但之后您可能会在以后向交换机添加其他情况,这可能会破坏该优化的清晰度。例如:
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;
突然间,当时看起来很不错的优化开始变得难以维护,难以阅读且容易出错。
在确定存在公共代码之后,我认为最干净的响应是编写函数来执行公共代码并从每个案例调用。展望未来,这将继续保持可持续性。
答案 2 :(得分:3)
不幸的是,这是唯一的方法,不能为partA
定义一个函数。
您可以通过从合并的switch
标签内退出case
来减少嵌套,以使代码看起来更加统一:
switch (someValue) {
case 'A':
case 'B':
// Code part A
if (someValue == 'A') break;
// Code part B
break;
case 'C':
break;
}
这使您的A部分和B部分代码具有相同的嵌套级别。
答案 3 :(得分:0)
可以" //代码B"在" //代码A"?之前执行如果是这样,你可以重新排序它们,让它在没有if条件的情况下通过。
我不认为还有其他事要做,否则。创建面向对象语言的原因之一是避免使用命令式语言中的代码重复。