【问题标题】:Break from an if statement into the else section从 if 语句中断到 else 部分
【发布时间】:2016-10-30 01:37:41
【问题描述】:

我有一个 if/else 语句。

if (something) {
    //run if logic
} else {
    //run else logic
}

if logic phase 期间,我可能会发现一些让我想要运行 if/else 语句的 else 部分的东西。逻辑阶段过于复杂,无法适应初始条件something

有没有类似break; 的东西可以用来跳转到if/else 语句的else 部分。

我目前正在这样做,但我的团队不喜欢使用 goto

if (something) {
    //run if logic
    if (somethingComplex) {
        goto elseSomething;
    }
} else {
    elseSomething:
    //run else logic
}

再次注意somethingElseComplex 是一个布尔状态,通过运行一些太大/多行的复杂代码来达到我的初始条件,否则我会这样做:if (something && somethingComplex),如果我在调用第一个条件之前计算 somethingComplex 我可以获得假阳性结果。关于!something

【问题讨论】:

    标签: objective-c c if-statement conditional


    【解决方案1】:

    除了goto,没有任何语言功能可以让你像这样任意转移控制权。

    从代码中的两个位置移动到另一个位置的另一种更好的方法是使用过程:方法或函数。我认为将else 分支的内容分解出来是按顺序排列的。然后从内部ifelse 分支调用新过程。

    您也可以考虑重构初始条件。应该有某种方法可以将这两个检查组合起来,而不必将它们粉碎到 if() 标题的括号中。

    【讨论】:

      【解决方案2】:

      在 Objective-C 中,我会使用预先设置的布尔标志,而不是使用 if/else,而是使用两个单独的 if 语句,如下所示(这是 Swift 代码,但结构相同):

      var needToDoSomethingElseComplex = false
      if something {
          // do stuff
          if somethingComplex {
              needToDoSomethingElseComplex = true
          }
      }
      if !something || needToDoSomethingElseComplex {
          // do something else complex
      }
      

      但是真正的 Swift 会给你一个优雅的方式来做你正在寻找的事情——switchfallthrough

      switch something {
      case true:
          print("hey")
          if somethingComplex {
              fallthrough
          }
          print("ho")
      case false:
          print("ha")
      }
      

      在上面,如果something 为真,如果somethingComplex 为真,我们打印“hey”然后“ha”,这正是您要查找的流程。

      【讨论】:

      • 这不是我所要求的确切答案——但是,我认为我所要求的没有答案。也就是说,这是 imo 下一个最简单的方法;谢谢!
      • 真正的 Swift 会给你一个实际的方法来做你想做的事(switchfallthrough),但 Objective-C 没有。切换到 Swift 的另一个原因(不是双关语)!我会将这一点添加到我的答案中。
      • 哇! Fallthrough很整洁!我很想switch 迅速。
      • 也可以为 FizzBu​​zz 提供创造性的解决方案哈哈
      【解决方案3】:

      怎么样……

      BOOL shouldGoToB = false;
      if (a) {
          //run if logic
          if (somethingComplex) {
              shouldGoToB = YES;
          }
      }
      
      if (!a || shouldGoToB) {
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-07
        • 2019-04-09
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 2012-07-18
        • 2020-09-19
        • 1970-01-01
        相关资源
        最近更新 更多