枚举类型是从 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 。

我这理由充分嘛?

7173 次点击
所在节点    程序员
94 条回复
janus77
2022-07-23 12:08:05 +08:00
这没什么对错,没必要争啊,自己喜欢用什么就用什么
lambdaq
2022-07-23 12:15:47 +08:00
你就说做一个异常占位的枚举为 0 。正常的都是 1 2 3 开始。
MEIerer
2022-07-23 12:37:43 +08:00
充分个毛,不都是 0 开始你吗,那些弱类型语言别人写的时候自然会进行判断
MEIerer
2022-07-23 12:38:32 +08:00
不过写好文档的话当我没说
changnet
2022-07-23 12:53:16 +08:00
就我而言,枚举从 0 开始,但业务逻辑一般是从 1 开始,0 是一个特殊值或者预留的,之前经常看到业务逻辑直接从 0 开始的,后面再定义一个特殊值会非常麻烦,比如
enum Type
{
None = 0, // 未指定
FOO = 1 // 业务逻辑的定义
}
WilliamYang
2022-07-23 13:20:49 +08:00
写 protobuf 时,一般枚举第一个都是 UNKNOWN ,除非 0 值是本身是有意义的,否则就从 1 开始。嗯,你领导是垃圾
dingyaguang117
2022-07-23 14:04:21 +08:00
绝大多数情况都建议从 1 开始,0 留给未指定
dingyaguang117
2022-07-23 14:07:27 +08:00
枚举还要考虑入库的场景呢, 如果 0 是有意义的, 未收集 /未指定 只能用 null 了。 对于静态类型语言是无尽的烦恼
shawnsh
2022-07-23 14:09:00 +08:00
从几开始不用太关注吧
DoveAz
2022-07-23 14:09:27 +08:00
为了避免不必要的 bug ,最好从 0 开始 🐶
wdhwg001
2022-07-23 14:12:59 +08:00
这里最佳实践是直接不给枚举的 0 值定义,并且任由它崩溃。

然后在文档里写明 0 值是 Invalid 的,但是代码里不需要把 0 值起名字为 Invalid ,而是直接从 1 开始,跳过 0 。

这样一来,那些没有赋值的枚举们就会直接崩溃,而代码也只需要在入口的地方处理掉这些 0 们,而不是每次写判断的时候脑子里都要带着这个 Invalid 。
DeWjjj
2022-07-23 14:16:41 +08:00
默认 = 0 ,部分特定写 1 。
文档里面都有,给什么写什么。
ppllss
2022-07-25 09:14:40 +08:00
从 0 开始
menc
2022-07-26 10:06:43 +08:00
@marcong95 数组和 tuple 是两回事

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

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

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

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

© 2021 V2EX