【问题标题】:What are the pros and cons to assigning the end point of a for loop?分配 for 循环的终点有什么优点和缺点?
【发布时间】:2014-08-23 08:42:27
【问题描述】:

在各种语言中(我将在这里使用 JavaScript,但我已经在 PHP 和 C++ 以及其他地方看到过它),似乎有几种方法可以构建一个简单的 for 循环。版本 1 是这样的:

var top = document.getElementsByTagName("p"); 
for (var i = 0; i < top.length; i++) {
...do something
}

而在其他地方,我见过人们构造 for 循环,例如:

for (var i = 0, ii = top.length; i < ii; i++) 

似乎人们无缘无故地做这件事——同一个程序员会在同一个脚本中做这两件事。有什么理由做一个而不做另一个?

干杯

【问题讨论】:

  • 你不是说top.length吗?
  • 第二个for loop 的语法无效:var i = 0, var ii = ..。应该是var i = 0, ii = ..
  • @barmar,是的,我改变了它。
  • @hindmost,你说的也对,我改了。抱歉,我写的很快。
  • @jamesdesq 你只改了第一个,没有改第二个

标签: javascript php loops coding-style


【解决方案1】:

在某些语言中,获取数组或字符串的长度可能是一项昂贵的操作。由于它在循环期间不会改变,因此每次测试迭代变量是否已到达末尾时都这样做是浪费的。因此,一次获取长度并将其保存在变量中会更有效。

一个例子是在 C 中迭代一个字符串。在 C 中,strlen() 是一个 O(n) 操作,因为它必须搜索 char 数组以寻找终止的 0 元素。如果你写:

for (i = 0; i < strlen(string); i++)

您的循环将是 O(n2)。

在像 Javascript 这样的语言中,获取长度的成本并不高,但程序员会坚持他们的旧习惯。甚至从未使用过其他语言的程序员从使用过其他语言的程序员那里学习习语,所以他们使用这种编码风格甚至不知道原因。

观看此 YouTube 视频,了解此类事情在社区中是如何发生的:

https://www.youtube.com/watch?v=b4vJ8l2NfIM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2010-09-21
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2019-05-21
    相关资源
    最近更新 更多