【问题标题】:break; vs continue; vs return;休息; vs 继续;与回报;
【发布时间】:2011-12-23 14:24:44
【问题描述】:

我从hotscripts.com下载了一份用php编写的免费通讯

我更新了一些代码以添加新功能,但我看到了一些我不明白的地方。

在我看到的代码中:

foreach() { ...
 if() ...
  break;
 elseif() ...
  continue;
}

我也看到了:

function() {
// ...
for($nl = 0; ...
 if() ...
  return true;
}

我读到break; 将停止循环,continue 将跳过循环到下一次迭代,return 将退出函数。

我不明白为什么要编码这种风格?为什么不使用类似的东西:

function() {
// ...
 for($nl = 0; ...
  if() ...
   $returnValue = true;
  else {
   $returnValue = false;
  }
 }
 return $returnValue;
}

或者在 for 循环中也有同样的想法?

【问题讨论】:

    标签: php loops


    【解决方案1】:

    使用 breakcontinue 等关键字可以使代码比您建议的更容易阅读。

    特别是如果您将 if/else 语句嵌套在一层以上。

    比较本文后面的 sn-ps,哪个更容易阅读? 它们都输出完全相同的东西,$Aarray (1,2,4,4,3,4)

    循环中的return(在函数内部)可以节省宝贵的 CPU 周期,如果您知道不需要进一步循环,为什么要这样做?


    我太酷了,无法使用break/continue..

    $not_even_found = false;
    
    foreach ($A as $v) {
      if ($v != 1) {
        if ($not_even_found) {
        } else if ($v % 2 != 0) {
          $not_even_found = true;
        } else {
          echo "$v\n";
        }
      }
    }
    

    我想要可读的代码..

    foreach ($A as $v) {
      if ($v == 1)
        continue;
    
      if ($v % 2 != 0)
        break;
    
      echo "$v\n";
    }
    

    【讨论】:

    • +1 if + continue 是做作的,但它确实强调了这一点。不要在家里做这个孩子:)
    • 这是一个很好的解释,只有两件事:1) 在 if 之后总是使用大括号。 2) 使用!== 而不是!=
    • @NicolaPeluchetti 大括号纯粹是一种风格偏好,我实际上更喜欢在单语句控件上显示它们被排除在外......不要用不必要的代码阻塞我的屏幕:)跨度>
    【解决方案2】:

    您使用该样式进行编码,以便在第一次满足条件时节省不必要的循环,然后您现在已经知道某些事情是正确的,您不需要进一步调查。

    事实上,如果你返回,你就会停止循环。一个愚蠢的例子

    function in_array($needle, $haystack){
       for($i = 0; $i < count($haystack); i++){
          if($needle === $haystack[$i]{
              return $i;
          }
       }
       return -1;
    }
    

    在这种情况下,当满足条件时,您会返回一些东西(true,或者在这种情况下是计数器的值),因为您不需要迭代整个数组

    【讨论】:

    • @Nicola Peluechetti,在返回之前 unset($haystack) 是否有助于释放内存?
    • @Benn 不,我不认为这会改变任何东西,内存是垃圾收集的,所以取消设置没有任何好处,恕我直言
    • @LloydMoore 你的意思是“摩尔真的少”吗?
    【解决方案3】:

    一些“为什么”归结为个人喜好。其中一些归结为在返回之前是否需要在同一个函数中完成其他事情。如果没有其他需要做的事情,并且该函数只是应该返回一个真或假的答案,那么直接使用return true; 是最方便的机制。如果即使在决定是否返回 true (例如关闭文件句柄)之后仍然需要做一些其他的事情,那么将响应分配给一个变量,然后在最后返回它可能是必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多