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

Del*_*D0D 5 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)在注释本身,对我来说,一个给我.当然,你只想缓存它.更具体地说,我的意思是在使用其他更复杂的功能的背景下.

对于那些肯定会想到"为什么不只是问那个写它的人"的人来说,他超级忙碌并且已经花时间来帮助我,我不想用太多的东西来推动"现在,你能解释所有的你对我的评论?"

Md.*_*ain 5

for ($i=0; $i < count($array); $i++); //is not efficient
Run Code Online (Sandbox Code Playgroud)

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

$count = count($array);
for ($i= 0; $i < $count; $i++); //is much efficient
Run Code Online (Sandbox Code Playgroud)

因为在这段代码中count函数会执行一次。在您之前的代码中,count函数执行多次。


dee*_*392 4

我能想到有几个原因:

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