对你来说什么是更好的做法和最好的可读性:
foreach ($k as $v) {
if($v == 10) {
continue;
}
// continue code ...
}
或:
foreach ($k as $v) {
if($v != 10) {
// code ...
}
}
也许这很愚蠢,但我经常问自己这个问题。你觉得怎么样?
这与其说是一个问题,不如说是一个投票,因此,没有正确的答案。
但是,一般来说,如果您的if
是否定的,或者很容易写成对应的if
(如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就这么做比跳过if等于10更容易让人出错)。
作为旁注,如果你在一个多元文化的环境中编码,你可能还必须考虑到相同的文化和语言在他们的语言中没有原生的否定,所以否定的概念是一个陌生的功能,即使是有经验的程序员有时也会在快速浏览代码时忽略它。但是,这可能是您需要考虑的,也可能不是。
我认为这个问题是基于你使用的编码标准。
我更喜欢
foreach ($k as $v) {
if($v != 10) {
// code ...
}
}
这样我就知道只有当$v
不同于10时它才会做一些事情。第一个选项说会继续,结果一样。但是如果你有一些代码,你可能会感到困惑。