为什么除了 lua,数组索引基本都从 0 开始?很反人类的设计,很容易写出 bug

2024-03-24 00:20:33 +08:00
 drymonfidelia
15379 次点击
所在节点    程序员
105 条回复
LeeReamond
2024-03-24 03:46:33 +08:00
@drymonfidelia 我从高中码到现在超过十年,仔细想了一下我个人实践的所有项目,恐怕加在一起也就二十万到三十万行之间,而且我自觉算是很勤奋的了。企业里正常程序员计算绩效,别管用什么语言,一天提交超过 200 行就算满状态工作了,算下来你十年不停,总共也就能开发 70 万行代码。

不知道你这几十万怎么出来的,几十万哥问出内存计数问题属实是让人见识物种多样性了。
hello2090
2024-03-24 05:42:38 +08:00
@drymonfidelia 所以是写了几十万行还经常数组 0 ,1 搞错?经常用[1]取第一个元素还是用[a.length]取最后一个元素?
nagisaushio
2024-03-24 08:31:01 +08:00
pascal: 你好
xiaogeformax
2024-03-24 08:39:38 +08:00
有需求可以改 lua 源码的,可以改成索引 0 开始
ARCHOR
2024-03-24 08:44:55 +08:00
脑内编译确实反人类 hhh
snw
2024-03-24 08:53:29 +08:00
Excel 欢迎你,单元格坐标和公式都是从 1 开始数,VBA 甚至能自行指定下标从 1 开始还是从 0 开始 🐶
Helsing
2024-03-24 09:14:32 +08:00
@heiher #18
步骤是一样的,不过从 0 开始通过加法就可以得到内存地址,从 1 开始要通过减法,但是加法的指令要比减法的指令快得多,所以设计成从 0 开始,对于提升底层效率是非常有用的,这个也是这样设计的最主要原因 @drymonfidelia
ShuWei
2024-03-24 09:22:51 +08:00
多写代码少抱怨,如果你是 Linus Torvalds 之流,随便喷,喷完还有人听,如果不是,遵守规则对自己比较好

至于因为 0 开始容易写 bug ,这还是代码写少了而已,多写写就好了
shinsekai
2024-03-24 09:37:01 +08:00
错误的,MATLAB 也是从 1 开始
iOCZS
2024-03-24 09:39:27 +08:00
下标是数组地址的偏移啊,第一个当然是 0 偏移
cmdOptionKana
2024-03-24 09:39:59 +08:00
编程、数学、物理学之类的纯理性的东西,本来就是反人类的,更严谨的说法是,这些学科不太关心“人类”,而是更关心“本质”。

编程,最初是让人去服务电脑,因为当时电脑的能力有限,人(程序员)要牺牲自己去迁就电脑,从 0 开始算是一种历史遗留习惯吧,其实以现在的电脑能力来看,从 1 开始完全没问题,只是这本身影响不大,就懒得改一直沿用下来了。
hertzry
2024-03-24 09:59:34 +08:00
错误的,Wolfram 也是从 1 开始。
Pteromyini
2024-03-24 10:24:24 +08:00
我的理解是,多数语言数组标识表示的是偏移量,也就是从起始内存+偏移量*固定位宽。所以第一个偏移量是 0 ,即从 0 开始
Building
2024-03-24 10:27:15 +08:00
你可以自己封装一个数组 wrapper ,从 1 开始,就是和别人合作容易被打
foam
2024-03-24 10:38:39 +08:00
@mohumohu 从 1 开始,也可以直接写 <=100 。其实都不是问题
iseki
2024-03-24 10:46:09 +08:00
可能是因为他们想用这个数字表示 offset 吧,那开头的那个 offset 可不就是 0 呗。如果你的程序也是按 offset 这套思路走,那还是挺舒服的。
iseki
2024-03-24 10:46:51 +08:00
@foam 其实还有个事,index 往往是个 i 或者 ui ,从 1 开始就浪费一个
iseki
2024-03-24 10:48:36 +08:00
早期语言很多都不是从 0 开始的,可能 C 开了个头?人家有指针,按 offset 的思路走很正常
baobao1270
2024-03-24 10:53:13 +08:00
因为编程语言最开始是 C ,用指针(指向一段内存的开头)来计数
日常计数中,我们说的 1 2 3 4 其实是指代 0~1 1~2 2~3 3~4 这样的区间 也就是用结尾指代第 n 个区间
编程语言的计数是用开头指代第 n 个区间
从科学的角度看,日常语言才是奇怪的那个
newtype0092
2024-03-24 10:53:40 +08:00
我以为是说 lua 从 1 开始反人类,没想到。。。这种思想不是从刚学编程时就会被扳过来么。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1026418

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX