【问题标题】:for loop syntax with if statements inside内部带有 if 语句的 for 循环语法
【发布时间】:2012-10-24 22:52:09
【问题描述】:

使用这样的 if 语句编写 for 循环的普遍共识是:

for (int i = 0; i < hi; i++) {
    if (some invalid condition) {
        continue;
    }

    if (another invalid condition) {
        continue;
    }

    //do stuff here after passing all the invalid conditions
}

相对于

for (int i = 0; i < hi; i++) {
    if (valid condition1 && valid condition 2 && ...) {
        //do stuff
}

在我看来,第一种编写方式更简洁,更便于调试,尽管它占用了更多行。我的主要问题是,以第二种方式编写它是否有任何优势。即使只有一个 if 语句,似乎以第一种方式编写它会更好,以便将来更容易维护/调试。

【问题讨论】:

    标签: loops syntax if-statement for-loop coding-style


    【解决方案1】:

    循环中的“CONTINUE”非常罕见。在大多数情况下,在循环中遇到无效情况自然会导致“BREAK”。但是,您的示例没有任何问题,如果这符合您的业务逻辑,它可能确实更合适。

    【讨论】:

      【解决方案2】:

      有些人不喜欢continue,因为它实际上是goto。例如,考虑:

      for (int i = 0; i < hi; i++) {
          ....
          do_this_for_each_full_iteration();
      }
      

      如果.... 包含任何continue 语句,则do_this_after_each_full_iteration() 将被绕过。

      这些人往往是在函数中间不喜欢returning 的人。

      【讨论】:

      • 休息怎么样,为什么更可取?
      • break 争议较小,因为它退出循环而不是假装当前迭代成功运行。不过还是有人不喜欢break。而continuereturn 意味着如果你想“在完成之前”执行一些事情,你必须在循环体/函数的末尾添加它每个过早的continue/ return.
      • 好点,虽然我认为这整件事被夸大了。我敢打赌,90% 不使用goto 的人都不知道为什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多