枚举类型是从 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 条回复
IGJacklove
2022-07-22 15:58:50 +08:00
他就是想怼你而已,从几开始根本不重要。你别陷入吃几碗粉的局。
sardina
2022-07-22 16:00:53 +08:00
@lanlanye go 是因为 int 默认为 0 所以建议 1 开始
lisongeee
2022-07-22 16:02:23 +08:00
可以从 1000 开始,这样 toString(10).length 是相等的,好对齐
xz410236056
2022-07-22 16:02:24 +08:00
@sardina #22 go 所谓的枚举不是用 iota 做初始值的吗?
nekoneko
2022-07-22 16:03:58 +08:00
我一般 0 禁用 1 启用 -1 删除, 其他枚举从 1 开始, 从 0 开始感觉怪怪的
tairan2006
2022-07-22 16:08:38 +08:00
混邪做法:用字符串
hopingtop
2022-07-22 16:09:04 +08:00
Golang 里面 用 iota 枚举, 但是我喜欢用 X = iota + 1 来设置枚举值,经验之谈,可以避免很多问题。杠就是你对
weiwenhao
2022-07-22 16:11:22 +08:00
typedef enum {
FOO = 1,
BAR,
CAR
} t;

c 语言里面某些情况也是默认 0 , 所以推荐从 1 开始
kera0a
2022-07-22 16:16:52 +08:00
要不是今年行情不好, 我就劝你离职了。
枚举值从几开始都能斗起来,工作氛围是多差啊
MuXia
2022-07-22 16:23:04 +08:00
@wangtian2020 #20 看了一圈下来,还是你这个离谱
456789
2022-07-22 16:26:51 +08:00
有个领导说我 mq 的 top 设置的太长运行中费内存,我看了他一眼说:你说的对,那有 bug 你来改
456789
2022-07-22 16:27:07 +08:00
topic
bxb100
2022-07-22 16:36:46 +08:00
@wangtian2020 太离谱了,你做的是手柄映射啊
lakehylia
2022-07-22 16:43:43 +08:00
我都是 4 个 char 凑成一个 int 当成枚举值,这样跟别人合并代码的时候,就完全不用枚举值会冲突了。比如
#define MAKE_ENUM_VALUE(a, b, c, d) ((int)(((unsigned int)(a)) | ((unsigned int)(b) << 8u) | ((unsigned int)(c) << 16u) | ((unsigned int)(d) << 24u)))
#define EOF MAKE_ENUM_VALUE( 'E','O','F',' ')
#define PLAYING MAKE_ENUM_VALUE( 'P','L','A','Y')

enum {
S_EOF = EOF,
S_PLAYING = PLAYING,
} status;
pastor
2022-07-22 16:55:36 +08:00
枚举本来就不是啥好玩意,明码标价各个值才方便阅读、日志。
同意的请点赞给我加分!
Huelse
2022-07-22 16:59:20 +08:00
我也喜欢从 1 开始,0 的隐含意义太多,文档就算是约定了也还要自查一遍才能理清
itechnology
2022-07-22 17:09:51 +08:00
讲道理,枚举从几开始关他什么事情,就这点事情他也要阴阳怪气,我建议你赶紧离职或者换个项目组
NGXDLK
2022-07-22 17:11:00 +08:00
枚举从 0 还是 1 开始也能拿出来说?我还从 100 开始呢,这 leader 怕不是傻屌大学毕业的
pkoukk
2022-07-22 17:17:52 +08:00
@xz410236056 可以用 iota+1 做初始值
IvanLi127
2022-07-22 17:19:56 +08:00
我认为枚举类型内部的表示方式不应该暴露给外部,交互的时候应该用字面值传递,而不是用整数。

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

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

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

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

© 2021 V2EX