【问题标题】:Code readability : if foreach conditions in PHP [closed]代码可读性:如果 PHP 中的 foreach 条件 [关闭]
【发布时间】:2016-06-27 09:31:09
【问题描述】:

对您来说更好的做法和最佳可读性是什么:

foreach ($k as $v) {

   if($v == 10) {
       continue;
   }

   // continue code ...
}

或者:

foreach ($k as $v) {

   if($v != 10) {
       // code ...
   }

}

也许这很愚蠢,但我经常问自己这个问题。 你觉得呢?

【问题讨论】:

  • 我认为选择第二个更好。
  • 这是基于意见和题外话。 (例如,我会根据代码和逻辑进行选择,什么更有意义。)
  • 据我了解,第二个是 O(1) 更快。所以你可以完全忽略它,并按照你喜欢的方式去!

标签: php conditional-statements code-readability


【解决方案1】:

这更像是一个民意调查而不是一个问题,因此,没有一个答案是正确的。

但是,一般来说,如果您的if 是否定的,或者很容易写成对应if 的else case(如if ($v == 10) {} else {/*...*/}),我会选择continue。因此,如果我想为$v 运行所有案例,除了少数例外,我会在开始时过滤这些例外并为它们执行continue

所以,我更喜欢:

foreach ($k as $v) {

   if($v == 10) {
       continue;
   }

   // code ...
}

这样做的原因是,当出现更多异常时,可以像这样轻松添加。

foreach ($k as $v) {
   if($v == 10 || $v == 29) {
       continue;
   }
   if($v = 12) {
       continue;
   }

   // ... code
}

当然,这也可以通过

if ($v != 10 && $v != 29 && $v != 12) {
    // ... code
}

但是这个if 不能被分割成多个条件,随着时间增加越来越多的例外情况,这些条件会迅速变得比理想情况更复杂,难以阅读和理解。

以这个例子为例。你认为哪个更清晰,更不容易掌握?

foreach ($k as $i => $v) {
    if ($i = 8) { continue; }
    if ($i % 3) { continue; }
    if ($v['foo'] == 'bar') { continue; }
    if ($v['bar'] == 'foo') { continue; }
    if ($v['foobar'] == 10) { continue; }
    if ($v['value'] < 0 || $v['value'] > 100) { continue; }

    // else, do code...
}

或者……

foreach ($k as $i => $v) {
    if ($i != 8 && !($i & 3) && $v['foo'] != 'bar' && $v['bar'] != 'foo' && $v['foobar'] != 10 && $v['value'] >= 0 && $v['value'] <= 100) {
        // do code ...
    }
}

另外,我发现否定更难理解(如果不等于 10 就这样做如果等于 10 就跳过更容易出现心理失误)。

作为旁注,如果您在多文化环境中编码,您可能还必须考虑相同的文化和语言在其语言中没有本地否定,因此否定的概念本身就是一个外来特征即使是经验丰富的程序员有时也会在快速浏览代码时错过。不过,这可能是您需要考虑的事情,也可能不是。

【讨论】:

    【解决方案2】:

    此问题基于我认为您使用的编码标准。

    我更喜欢

    foreach ($k as $v) {
       if($v != 10) {
           // code ...
       }
    }
    

    这样我会知道它只会在$v 与 10 不同时才会做某事。第一个选项表示它将继续,结果相同。但是如果你有一些代码,你可能会感到困惑。

    答案仍然取决于您的喜好。

    【讨论】:

    • 许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定的专业知识。 - 基于意见的问题是题外话,因为它们从来没有明确的答案。所以回答它们没有帮助,因为你永远无法正确回答它们。
    猜你喜欢
    • 2012-10-31
    • 2010-10-07
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多