为什么在for循环的条件下调用函数是不好的?

时间:2016-02-15 07:58:15

标签: php loops for-loop

我最近要求应用程序架构师在工作中查看我编写的php脚本,以自动执行我在帮助台部门每周执行的一些任务。

在他的评论中他说过

  

## Loops

     

Your loops are good, you didn't do anything bad like calling functions in the condition

     

for ($i=0; $i < count($array); $i++); is BAD

老实说,我之前从未想过在我的代码中这样做,但它让我想知道为什么会这么糟糕。

我认为这是因为,函数的结果可能是任何值,它似乎是创建无限循环的一种完美方式,并且通常会导致意外行为。

我尝试使用谷歌搜索,但找不到相关结果,所以我问:

为什么在for循环的条件下调用函数是不好的?

注意评论本身中的count($array)对我来说是个好意思。当然,你只想缓存它。更具体地说,我的意思是使用其他更复杂的函数。

对于那些肯定会怀疑“为什么不只是问那个写它的人”的人,他超级忙,已经花时间帮助我,我不想太过分了与“现在,您能否向我解释所有评论?”

3 个答案:

答案 0 :(得分:4)

for ($i=0; $i < count($array); $i++); //is not efficient

是的,使用起来效率不高,因为在每个被调用的迭代函数中都不好。您需要执行此功能一次。

$count = count($array);
for ($i= 0; $i < $count; $i++); //is much efficient

因为在此代码中count函数将执行一次。在您之前的代码count函数执行多次。

答案 1 :(得分:4)

我可以想到几个原因:

  • 函数的返回值可能会有所不同,因此您无法确定您的循环是否仍然有限
  • 在某些语言中,返回类型不受保证,因此您还有另一个未定义行为的机会
  • 通常性能较差(特别是在count()示例中)
  • 它降低了可读性,因为开发人员现在需要查看和理解该函数,只知道循环应该运行多少次
  • 每次评估条件时,我都无法想到为什么实际需要函数返回值的任何合法示例
  • 在运行时无法(轻松)确定迭代次数,因为必须在每次迭代结束时再次调用该函数

答案 2 :(得分:3)

最好事先对值进行计数,因为如果将它放在循环中,则会在每次迭代时执行该函数以检查是否满足条件。

在这个例子中,count函数不是太重,也不会减慢你的程序速度(除非它是一个很大的数组),但要注意更大的函数。