权威论证
嗯...显然,大多数语言,包括最近的语言,都是从零开始的。由于那些语言是由相当熟练的人编写的,所以你的朋友一定是错的......
为什么是一个?
为什么 1 比 0 是更好的起始索引?为什么不是 2 或 10?答案本身很有趣,因为它展示了很多人为这个想法辩护的过程。
first 参数更自然,因为 1st 通常是 one 在所有其他参数之前,至少对于大多数人来说人...
number-一个参数是最后一个索引也是数组的大小...
我仍然对我经常听到的这类论点的“质量”印象深刻......当我被提醒时更是如此......
为什么不为零?
...“以一为基础”的符号是西方文化的遗留物,几个世纪以来一直忽视零的存在。
信不信由你,最初的公历是从 -3、-2、-1、1、2、3... 试着想象一下它对西方科学的贡献(例如,从 1 日算起多少年) 1月-2日到1月2日看到比原来的公历和减法这么简单的东西冲突...)。
保持基于 1 的数组就像(好吧,我会为此被降级...^_^ ...),在 21 世纪保持英里和码...
为什么是零?因为它是数学!
首先(哎呀……对不起……我会再试一次)
零,零什么都不是,一是什么。而一些宗教典籍认为“起初,什么都没有”。一些与计算机相关的讨论可能像宗教辩论一样激烈,所以这一点并不像看起来那么脱离主题...... ^_^
首先,使用从零开始的数组并忽略其第零值比使用从一开始的数组并四处寻找其第零值更容易。这个理由几乎和前一个一样愚蠢,但是,最初支持基于 1 的数组的论点也是相当谬误的。
第二,让我们记住,在处理数字时,你很可能会偶尔处理数学,而当你处理数学时,很有可能你没有心情让愚蠢的黑客绕过过时的约定。几个世纪以来,从一为基础的符号也一直困扰着数学和日期,通过从我们的错误中吸取教训,我们应该努力在面向未来的科学(包括计算机语言)中避免它。
第三,至于与硬件绑定的计算机语言数组,分配一个21个整数的C数组,并将指针向右移动10个索引,你就会有一个自然的[-10到 10] 数组。这对于硬件来说是不自然的。但它适用于数学。当然,数学可能已经过时了,但我上次检查时,世界上大多数人都认为不是。
四,正如已经在别处指出的那样,即使对于离散位置(或减少为离散值的距离),第一个索引也是零,就像建筑物中的地板(从零开始),递减倒计时(3、2、1、零!)、地面高度、图像的第一个像素、温度(零开尔文,对于绝对零或零摄氏度,水结冰温度为 273 K)。事实上,真正从一个开始的只有传统的“first、second、third等方式。 iteration 表示法,它自然地将我引向 next 点...
五 下一个点(自然跟在上一个之后)是应该访问高级容器,而不是通过索引,而是通过迭代器,除非索引本身具有内在价值。我很惊讶您的“高级语言”倡导者没有提到这一点。在索引本身很重要的情况下,您可以打赌您有一半的时间会想到一个与数学相关的问题。因此,您希望您的容器是数学友好型的,而不是像从 1 开始的“你的旧公历”那样数学禁用,并且需要反刍的 hack 才能使其工作。
结论
你的程序员同事给出的论点是一个谬误,因为它不必要地将口语/书面语言习惯与计算机语言(本质上是模糊的)联系在一起(你不希望你的指令模糊),并且因为归因于这个问题的硬件原因是错误的,他希望让你相信,随着语言在抽象方面越来越高,从零开始的数组已经成为过去。
从零开始的数组是从零开始的,因为数学相关的原因。不是硬件相关的原因。
现在,如果这对您的程序员同事来说是个问题,让他开始使用真正的高级构造进行编程,例如迭代器和 foreach 循环。