优化开关案例代码

时间:2014-04-30 02:40:19

标签: 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'。我想避免重复代码。

如果我们使用fall,那么我们需要为case B添加if条件。这是避免重复代码的唯一方法吗?

4 个答案:

答案 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条件的情况下通过。

我不认为还有其他事要做,否则。创建面向对象语言的原因之一是避免使用命令式语言中的代码重复。