【问题标题】:optimizing switch case code优化switch case代码
【发布时间】:2014-04-30 02:40:19
【问题描述】:

我的代码中有以下开关盒。

   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条件。这是避免代码重复的唯一方法吗?

【问题讨论】:

    标签: c switch-statement code-duplication


    【解决方案1】:

    如果顺序不重要,你可以这样做:

    switch (condition)
    {
        case 'B':
            // Code part B
            // no break
        case 'A':
            // Code part A
            break;
        ...
    }
    

    case 'B' 将继续通过 case 'A' 代码执行,因为您没有调用 break。

    【讨论】:

    • 如果 A 部分和 B 部分的顺序不重要,则此方法有效
    【解决方案2】:

    操作 switch 语句以减少代码重复可能一开始可能有效,但稍后您可能会在 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;
    

    突然间,当时看起来不错的优化开始变得难以维护、难以阅读且容易出错。

    已经确定有通用代码,在我看来,最简洁的响应是编写函数来执行通用代码并从每个案例中调用。展望未来,这将继续可维护。

    【讨论】:

      【解决方案3】:

      不幸的是,这是唯一的方法,没有为 partA 定义函数。

      您可以通过从组合的case 标签内部退出switch 来减少嵌套,使代码看起来更统一:

      switch (someValue) {
          case 'A':
          case 'B':
              // Code part A
              if (someValue == 'A') break;
              // Code part B
              break;
          case 'C':
              break;
      }
      

      这让您的 A 部分和 B 部分代码具有相同的嵌套级别。

      【讨论】:

      • 丑陋,但可能是替代品中最不丑的:)
      【解决方案4】:

      “//代码部分B”可以在“//代码部分A”之前执行吗?如果是这样,您可以重新排序它们并让它在没有 if 条件的情况下通过。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 2013-09-22
        • 2021-10-13
        相关资源
        最近更新 更多