枚举类型是从 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 条回复
bojackhorseman
2022-07-22 21:49:44 +08:00
别的不知道,反正我们的 go 后端用 1 表示有,2 表示没有
Leviathann
2022-07-22 21:55:58 +08:00
为什么不是直接序列化成字符串
banricho
2022-07-22 21:59:36 +08:00
为啥要让前端知道数字
接口里看到不是字符串而是一堆数字搭配文档的,是我也要阴阳怪气
ikaros
2022-07-22 22:10:41 +08:00
有些语言从 0 开始会有问题(golang), 所以从 1 开始准没错
blankmiss
2022-07-22 22:28:53 +08:00
@wangtian2020 我靠 这是什么操作
Helsing
2022-07-22 23:08:10 +08:00
习惯确实是从 0 开始,你从 1 开始的理由没有说服力
aMR
2022-07-22 23:54:21 +08:00
当然是互相妥协一下从 0.5 开始 ε=ε=ε=┏(゜ロ゜;)┛

实际项目中,可以在枚举值最前面加入一个 Invalid\Undefined 的默认枚举值,既满足了从 0 开始,又可以防止有人没初始化搞出奇怪结果
iseki
2022-07-23 00:09:22 +08:00
哈,通讯时只要不是紧凑的二进制协议,我倾向于用字符串当枚举值~人类可读,易调试,看见就知道啥意思不用查表
Aloento
2022-07-23 02:42:20 +08:00
枚举从多少开始这不就是看心情的事情吗(
xumng123
2022-07-23 07:19:41 +08:00
0
Chingim
2022-07-23 08:21:29 +08:00
枚举值本来就是无序的有限的状态集合,哪有什么“从哪开始”的说法

抛开具体语言,枚举值不仅仅只能用数字表示,难道用字符表示枚举,还得从 A 开始吗?
zed1018
2022-07-23 08:25:36 +08:00
使用数字作为枚举值 ×
使用单词作为枚举值 √

我可不想看着字段脑子里还要加载翻译器 (逃
xaplux
2022-07-23 08:43:36 +08:00
前几天我们前端也问我来着,说数据字典可以从 0 开始么,我说 0 有特殊含义,不可以,她也就没有再问,猜测数据字典一般用于下拉列表,从 0 开始前端方便处理吧
ydpro
2022-07-23 08:53:18 +08:00
单纯想怼你就是了,下次枚举用雪花算法生成
Lirika
2022-07-23 09:00:07 +08:00
我习惯从 0 开始
使用的时候可以声明一个数组$a=['a','b','c']
然后用你返回的枚举就直接取出来 $a[枚举值]
iColdCat
2022-07-23 10:45:01 +08:00
下次给他设计随机数 惯丫毛病
skinny
2022-07-23 10:55:46 +08:00
除了可以组合状态的枚举类型,不是一般用有意义的字符串名字吗?前端拿到的、发送的也是字符串,这样比较容易理解吧
brader
2022-07-23 11:19:39 +08:00
我就比较叼了,这东西都是随缘的,今天想从 0 开始就从 0 ,明天想从 1 开始就从 1
brader
2022-07-23 11:20:10 +08:00
我有时候还是从-1 开始的,哈哈,完全看心情
brader
2022-07-23 11:21:59 +08:00
@skinny 枚举的键一般是没有什么展示意义的,只要保证唯一即可,对外用户展示的会有一个对应的中文名称。所以枚举值在英文或数字都可的场景下,后端一般会选择数字,是因为数据库存储 tinyint 更高效

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

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

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

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

© 2021 V2EX