枚举类型是从 0 开始还是从 1 开始

2022-07-22 14:58:54 +08:00
 cnoder

起因:那天听到前端 leader 在阴阳怪气我设计的枚举不是从 0 开始,跟旁边的人说什么“但凡学过 java 。。。。。也应该知道。。。”云云

我(我是后端)也没和他辩解

我说下我的理由吧

  1. 如果用 int 来代表 true/false ,我会设计为 0/1
  2. 如果是几种状态值,我会选择从 1 开始,避免选择 0 。因为某些弱类型语言在判断 0 的时候会自动做类型转换,而且我们目前业务上使用的后端语言也是 lua ,数组索引是从 1 开始的。

所以我在跟前端定义参数的时候 选择 1 、2 、3 来表示样式 123 。

我这理由充分嘛?

7249 次点击
所在节点    程序员
94 条回复
coderluan
2022-07-22 15:05:05 +08:00
不充分,完全不能解释为啥你不和他辩解。
villivateur
2022-07-22 15:07:18 +08:00
如果单论语言设计的话,我所了解的 enum 都是默认从 0 开始的
timethinker
2022-07-22 15:09:38 +08:00
前后端统一就行(意味着有一个文档来进行维护,类似字典),至于值是什么在编写代码的时候无关紧要,值只有在传输或者存储的时候才会被用到。不同语言的对于枚举这个东西定义还不一样,不过逻辑上来讲枚举通常意义下就是一个有限的集合,这个集合里面定义的每一个枚举单位都是独一无二的,这样就可以借助语言的特性来进行一些约束性的操作。
bootvue
2022-07-22 15:10:06 +08:00
从几开始关他屁事
IceBay
2022-07-22 15:14:44 +08:00
但凡写过项目,就知道从几开始关他屁事
lanlanye
2022-07-22 15:16:20 +08:00
我记得 Uber 的 Golang 风格里提到过建议从 1 开始,理由和你说的一样
wowawesome
2022-07-22 15:17:20 +08:00
直接叼他,从几开始关你屁事,看劳资的接口文档用就行了。
Lin0936
2022-07-22 15:19:55 +08:00
下次给他从 999 开始倒着来
menc
2022-07-22 15:22:36 +08:00
scala 的 tuple 类型下标就是从 1 开始的,你可以回一个阴阳怪气,“但凡学过 scala ,也应该知道....”
menc
2022-07-22 15:24:39 +08:00
https://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28array%29#Array_system_cross-reference_list

从这里可以看到 array 下标的起始值 0 和 1 五五开,你 leader 还是太 naive
sadfQED2
2022-07-22 15:26:53 +08:00
我一般也喜欢从 1 开始,因为 0 是默认值,用 0 当枚举偶尔出错忘了赋值的时候都不容易发现
HOU
2022-07-22 15:27:23 +08:00
叼他完了,你的设计没错,管的真宽
marcong95
2022-07-22 15:29:31 +08:00
@menc #10 然而你给的链接里 Scale 的下标是 0 开始的,这就十分有趣了
dqzcwxb
2022-07-22 15:30:29 +08:00
现在你可以把大家提供的资料甩他脸上,美其名曰"技术分享"
SuperMild
2022-07-22 15:31:37 +08:00
提醒:不是数组,是枚举。
libook
2022-07-22 15:49:19 +08:00
既然 Lua 默认从 1 开始,你就把 Lua 的文档丢给他,说“但凡多了解几门语言也应该知道不一定都从 0 开始。”

不管从几开始,这个是涉及到前后端协商标准的问题,后端不需要为前端考虑太多,前端也不需要为后端考虑太多,严格按照约定的标准自己管好自己就好了,否则就容易好心当成驴肝肺。

一个人对一个事物越是不了解,就越会使用过往经验和思维定式去揣测,吐槽者此举无疑暴漏了自己的无知,就像那个认为火箭应该用水洗煤的民科一样。
xz410236056
2022-07-22 15:53:23 +08:00
用 swift ,告诉他,枚举是可以没有初始值的,既不是 0 也不是 1
ysc3839
2022-07-22 15:53:36 +08:00
我会用 0 来表示一些特殊值,比如说是读取配置文件,把字符串转成枚举的话,我会把 0 设为 Unknown ,字符串错误的话就是 Unknown 。
RainCats
2022-07-22 15:54:22 +08:00
枚举的索引确实是从 0 开始的,但自己定的 code 值看各人风格了,现在我吸取教训一般都是一开始定义时就 10 、20 、30 这样递增。。
wangtian2020
2022-07-22 15:58:43 +08:00
我有交付的一个项目,枚举值是“↑ ↓ ← →”

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

https://www.v2ex.com/t/868018

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

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

© 2021 V2EX