代码块的最有效位置在哪里,只有在循环到达终点时才执行,而不会先中止(通过中断或返回)?
问题似乎平庸,答案显而易见,但我不安全!
非常欢迎效率/理论专业人士的回答!
提供:“某些代码X”始终相同,仅在不同的代码段位置1和2处。
我假设:2将以与1相同的可靠性执行。我错了吗?
我知道: 2显然效率更高,因为它只在循环运行$ limit times之后调用一次,而不是1,其封闭的if条件称为$ limit times ,如果一旦为真,则调用代码本身。因此,效率差异是 if条件查询$ limit times 。
因此我得出结论:更喜欢使用代码段2而不是代码段1,除非我的假设是错误的!
for ($i = 0; $i <= $limit; $i++) {
// Some Code A [...]
// Executed every iteration.
// If condition is met, abort the loop and return $result
if (condition) {
return $result;
}
// Code Segment 1, only executed in last iteration if no abortion happened previously. If-condition checked $limit times!
if ($i == $limit) {
// Some Code X [...]
return $result
}
}
// Code Segment 2, only executed if no abortion happened. At most executed only once!
// Some Code X [...]
return $result
答案 0 :(得分:1)
这样的东西?:
$aborted = false;
for ($i = 0; $i <= $limit; $i++) {
// Code
if ($condition) {
// Code
$aborted = true;
break;
} else {
// Code
}
}
if ($aborted) {
// Code
} else {
// Code
}
return $result;
如果您正在浏览数组(或其他可迭代结构),请使用foreach循环并将“完成循环”代码放在其后面。
答案 1 :(得分:1)
您已经正确地得出结论..由于您已经说过的原因,第2段比第1段效率更高..
我的复杂性方面,在for循环的情况下你有O(n)(其中n = $ limit)和2的incase它是一个常数O(1)..所以是的,第2段是通往去。
答案 2 :(得分:0)
如果在停止循环时使用return,则循环后的第二个块将始终执行,因为return会停止整个函数。
如果你正在使用休息。你可以使用if($ i == $ limit)语句。