休息;vs 继续;vs 返回;

2022-08-30 14:51:00

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

我更新了一点代码以添加新功能,我看到了一些我不明白的东西。

在代码中,我看到:

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

我还看到:

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

我读到这将停止循环,将循环跳过到下一个迭代,并将退出函数。break;continuereturn

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

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

还是在 for 循环中具有相同的想法?


答案 1

使用诸如 和 之类的关键字可以使代码比您建议的代码更易于阅读。breakcontinue

特别是如果你嵌套 if/else 语句多个级别。

比较这篇文章中进一步的片段,哪一个更容易阅读?它们都输出完全相同的东西,并且是.$Aarray (1,2,4,4,3,4)

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


我太酷了,不能使用 /.。breakcontinue

$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";
}

答案 2

您使用该样式进行编码,以便在第一次满足条件时保存不必要的循环,那么您现在已经知道某些内容是正确的,并且不需要进一步调查。

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

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

在这种情况下,当满足条件时,您将返回一些东西(true,或者在本例中为计数器的值),因为您不需要遍历整个数组


推荐