【发布时间】:2011-03-20 03:50:47
【问题描述】:
我和一些同事正在比较我们过去使用的编程语言,并谈论我们使用 VBScript 及其奇怪 功能的体验,例如 基于 1 的索引 而不是像几乎所有其他语言那样从 0 开始的索引,原因是它是一种用户语言(例如 Excel VBA)而不是开发人员语言。
然后有人说,“XPath 也有从 1 开始的索引”,直到我找到 this article 之后我才相信,其中给出了很多原因 支持基于 0 的方法,包括 Michael Kay 本人的一些方法:
- “...在使用一维数组访问表达式访问多维数组时,从零开始的索引倾向于使索引公式更简单”
- “在处理表格或下标为字符串时,从零开始的寻址通常会更方便”
- "...硬件寻址不是基于 0 的寻址的唯一好处...它还使计算更容易..."
但随后引用迈克尔·凯作为结论:
...基于 1 的逻辑是 XPath 和 XSLT 的正确选择...因为语言是设计的 面向用户,而不是面向程序员,以及 用户仍然有这个老式 习惯参考第一个 一本书的第一章……
谁能给我解释一下? (1) XPath 是如何为用户设计的? 我无法想象任何不是开发人员的人都会为 XPath 的语法僵化或 XSLT 的声明性/函数式编程方面而争论不休。 (2) 为什么 XPath 的创建者真的违背了现代编程语言的规范,选择了从 1 开始的索引?
【问题讨论】:
-
在同一篇文章中,迈克尔还引用了以下的话:“我无法告诉你该决定的实际历史是什么;我只能对其进行后合理化”。如果连他都不知道,那么可能就没有令人满意的答案。
-
我已经投票结束这个问题,因为它是主观的和有争议的。基于 0 的索引绝不比基于 1 的索引好,反之亦然:基于 1 的索引绝不比基于 0 的索引好。两者都有优点和缺点。对于非程序员来说,基于 1 的索引更自然。它还允许将范围的上限指定为
n,而不是非常不自然且经常导致错误n - 1。对于任何因“现代编程”逻辑而变态的人来说,开始使用基于 1 的索引将是一种享受和令人耳目一新的体验:) -
这个 stackoverflow 问题的答案表明基于 0 的索引是首选的原因有很多:stackoverflow.com/questions/393462/defend-zero-based-arrays
-
我的问题实际上是一个真正的问题,因为我教编程,并且希望在出现有关 xpath 索引的问题时得到答案。我认为最好的答案是基于 1 的索引映射到在 xpath 中大量使用的 position()。
-
我认为这是一个合法的问题,不应该被关闭。它要求一个历史事实,而不是意见问题,答案将是有启发性的。