
起因:那天听到前端 leader 在阴阳怪气我设计的枚举不是从 0 开始,跟旁边的人说什么“但凡学过 java 。。。。。也应该知道。。。”云云
我(我是后端)也没和他辩解
我说下我的理由吧
所以我在跟前端定义参数的时候 选择 1 、2 、3 来表示样式 123 。
我这理由充分嘛?
是ios.leader他在和web.leader这么说,web他就在那附和。。。
事情其实过去已经一周了。只是我老看到他俩就想起来
弱类型语言我说的是php
1 coderluan Jul 22, 2022 不充分,完全不能解释为啥你不和他辩解。 |
2 villivateur Jul 22, 2022 via Android 如果单论语言设计的话,我所了解的 enum 都是默认从 0 开始的 |
3 timethinker Jul 22, 2022 前后端统一就行(意味着有一个文档来进行维护,类似字典),至于值是什么在编写代码的时候无关紧要,值只有在传输或者存储的时候才会被用到。不同语言的对于枚举这个东西定义还不一样,不过逻辑上来讲枚举通常意义下就是一个有限的集合,这个集合里面定义的每一个枚举单位都是独一无二的,这样就可以借助语言的特性来进行一些约束性的操作。 |
4 bootvue Jul 22, 2022 从几开始关他屁事 |
5 icebay Jul 22, 2022 但凡写过项目,就知道从几开始关他屁事 |
6 lanlanye Jul 22, 2022 我记得 Uber 的 Golang 风格里提到过建议从 1 开始,理由和你说的一样 |
7 wowawesome Jul 22, 2022 直接叼他,从几开始关你屁事,看劳资的接口文档用就行了。 |
8 Lin0936 Jul 22, 2022 下次给他从 999 开始倒着来 |
9 menc Jul 22, 2022 scala 的 tuple 类型下标就是从 1 开始的,你可以回一个阴阳怪气,“但凡学过 scala ,也应该知道....” |
10 menc Jul 22, 2022 https://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28array%29#Array_system_cross-reference_list 从这里可以看到 array 下标的起始值 0 和 1 五五开,你 leader 还是太 naive |
11 sadfQED2 Jul 22, 2022 via Android 我一般也喜欢从 1 开始,因为 0 是默认值,用 0 当枚举偶尔出错忘了赋值的时候都不容易发现 |
12 HOU Jul 22, 2022 叼他完了,你的设计没错,管的真宽 |
14 dqzcwxb Jul 22, 2022 现在你可以把大家提供的资料甩他脸上,美其名曰"技术分享" |
15 SuperMild Jul 22, 2022 via Android 提醒:不是数组,是枚举。 |
16 libook Jul 22, 2022 既然 Lua 默认从 1 开始,你就把 Lua 的文档丢给他,说“但凡多了解几门语言也应该知道不一定都从 0 开始。” 不管从几开始,这个是涉及到前后端协商标准的问题,后端不需要为前端考虑太多,前端也不需要为后端考虑太多,严格按照约定的标准自己管好自己就好了,否则就容易好心当成驴肝肺。 一个人对一个事物越是不了解,就越会使用过往经验和思维定式去揣测,吐槽者此举无疑暴漏了自己的无知,就像那个认为火箭应该用水洗煤的民科一样。 |
17 xz410236056 Jul 22, 2022 用 swift ,告诉他,枚举是可以没有初始值的,既不是 0 也不是 1 |
18 ysc3839 Jul 22, 2022 via Android 我会用 0 来表示一些特殊值,比如说是读取配置文件,把字符串转成枚举的话,我会把 0 设为 Unknown ,字符串错误的话就是 Unknown 。 |
19 RainCats Jul 22, 2022 枚举的索引确实是从 0 开始的,但自己定的 code 值看各人风格了,现在我吸取教训一般都是一开始定义时就 10 、20 、30 这样递增。。 |
20 wangtian2020 Jul 22, 2022 我有交付的一个项目,枚举值是“↑ ↓ ← →” |
21 IGJacklove Jul 22, 2022 via iPhone 他就是想怼你而已,从几开始根本不重要。你别陷入吃几碗粉的局。 |
23 lisongeee Jul 22, 2022 可以从 1000 开始,这样 toString(10).length 是相等的,好对齐 |
24 xz410236056 Jul 22, 2022 @sardina #22 go 所谓的枚举不是用 iota 做初始值的吗? |
25 nekoneko Jul 22, 2022 我一般 0 禁用 1 启用 -1 删除, 其他枚举从 1 开始, 从 0 开始感觉怪怪的 |
26 tairan2006 Jul 22, 2022 混邪做法:用字符串 |
27 hopingtop Jul 22, 2022 Golang 里面 用 iota 枚举, 但是我喜欢用 X = iota + 1 来设置枚举值,经验之谈,可以避免很多问题。杠就是你对 |
28 weiwenhao Jul 22, 2022 typedef enum { FOO = 1, BAR, CAR } t; c 语言里面某些情况也是默认 0 , 所以推荐从 1 开始 |
29 kera0a Jul 22, 2022 要不是今年行情不好, 我就劝你离职了。 枚举值从几开始都能斗起来,工作氛围是多差啊 |
30 MuXia Jul 22, 2022 @wangtian2020 #20 看了一圈下来,还是你这个离谱 |
31 456789 Jul 22, 2022 有个领导说我 mq 的 top 设置的太长运行中费内存,我看了他一眼说:你说的对,那有 bug 你来改 |
32 456789 Jul 22, 2022 topic |
33 bxb100 Jul 22, 2022 @wangtian2020 太离谱了,你做的是手柄映射啊 |
34 lakehylia Jul 22, 2022 我都是 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; |
35 pastor Jul 22, 2022 枚举本来就不是啥好玩意,明码标价各个值才方便阅读、日志。 同意的请点赞给我加分! |
36 Huelse Jul 22, 2022 我也喜欢从 1 开始,0 的隐含意义太多,文档就算是约定了也还要自查一遍才能理清 |
37 itechnology Jul 22, 2022 讲道理,枚举从几开始关他什么事情,就这点事情他也要阴阳怪气,我建议你赶紧离职或者换个项目组 |
38 NGXDLK Jul 22, 2022 枚举从 0 还是 1 开始也能拿出来说?我还从 100 开始呢,这 leader 怕不是傻大学毕业的 |
39 pkoukk Jul 22, 2022 @xz410236056 可以用 iota+1 做初始值 |
40 IvanLi127 Jul 22, 2022 我认为枚举类型内部的表示方式不应该暴露给外部,交互的时候应该用字面值传递,而不是用整数。 |
41 YouRTBUG Jul 22, 2022 就这也是 leader ? |
42 molvqingtai Jul 22, 2022 via Android 我写前端使用 -1 表示全部 |
43 BeautifulSoap Jul 22, 2022 via Android 都用枚举了还在乎起始值?直接给他来个 99 起,专治不服 |
44 maybe0410 Jul 22, 2022 我一般 100 ,200 ,300 |
45 catsoul Jul 22, 2022 @BeautifulSoap 雀食,枚举就别跟其他的混了,直接 100 起跳 |
46 Building Jul 22, 2022 via iPhone 枚举值和属性值绑定,随便 枚举值和属性值无关,还是随便 但我喜欢有默认值的时候在 0 位放默认值,没有默认值用 none |
47 stevefan1999 Jul 22, 2022 via Android 不要 lua 壬震怒(我不是) 上 lua 是有定索引方向 但社定是 1 始 0 始是 1 始 含了 offset absolute positon 派之 我人算法是支持 1 始的 但上用是最好得 0 |
48 potatowish Jul 22, 2022 via iPhone 不要和前端、客户端讨论后端的问题,和一个外行讨论技术问题就是浪费时间。 |
49 akagishigeru Jul 22, 2022 via iPhone 你的理由是对的,前端的确有这种情况 |
50 wktrf Jul 22, 2022 作为前端我也喜欢用 1 开始,0 很容易疏忽导致判断出现问题 |
51 lucays Jul 22, 2022 作为写 python 的,除非枚举就俩,否则肯定从 1 开始 |
52 mmdsun Jul 22, 2022 有设计文档说应该从 1 开始不过有争论。有个例子:Mysql 的枚举是从 1 开始的,0 会报错。 文档写: () 0 ,保留字 1 ,状态 1 2 ,状态 2 文档: ( X ) 1 ,状态 1 2 ,状态 2 |
53 buxudashi Jul 22, 2022 1 就是 1.而 0 就不一定了。有时 false,null,空字符串,empty(),什么乱七八糟的相通。 所以你是对的。 |
54 elevioux Jul 22, 2022 via Android php 开发,从 1 开始,理由一样 |
55 xiubin Jul 22, 2022 从 0 开始,0 是无业务意义或者默认的一档,比如 0 可以是:unknow 、none 、default 、normal 。 iOS 开发( OC 语言)一般无法识别 nil 0 null 的区别 |
56 mengzhuo Jul 22, 2022 枚举的话,0 一般是非法(就是防止协议解析失败) |
57 byzod Jul 22, 2022 标准答案:关你卵事,我从 114514 开始 |
58 FrankHB Jul 22, 2022 下标的问题,只能说历史丈育太多,典都不知道,还用得着举例了:www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html Lua ?算哪根葱……况且 Lua 用户自己很多就不满意:lua-users.org/wiki/CountingFromOne 再有争议可能还是数学丈育更多,分不清基数和序数。 至于枚举……谁告诉你枚举就非得有从几开始的问题? 还是 C 枚举当整数,于是随便什么语言都需要关心编码? ( Swift:?) 而且咋不学 C 把 char 也整成整数类型呢? @byzod 太臭了,要肛掉。 |
59 icyalala Jul 22, 2022 如果是 enum 关联到整数,那我还是倾向从 0 开始,0 就是一个默认值。 lua 那个设计 table 就是从 1 开始的,所以 enum 从 1 开始也算符合他们的习惯。 其他不少语言 enum 可以不关联到整数,那就不用争了。 |
60 zm8m93Q1e5otOC69 Jul 22, 2022 想从多少就多少呗,写清楚不就行了。。咋还有这种领导。。 |
61 dumbass Jul 22, 2022 via iPhone 别的不知道,反正我们的 go 后端用 1 表示有,2 表示没有 |
62 Leviathann Jul 22, 2022 为什么不是直接序列化成字符串 |
63 banricho Jul 22, 2022 为啥要让前端知道数字 接口里看到不是字符串而是一堆数字搭配文档的,是我也要阴阳怪气 |
64 ikaros Jul 22, 2022 有些语言从 0 开始会有问题(golang), 所以从 1 开始准没错 |
65 blankmiss Jul 22, 2022 @wangtian2020 我靠 这是什么操作 |
66 Helsing Jul 22, 2022 via iPhone 习惯确实是从 0 开始,你从 1 开始的理由没有说服力 |
67 aMR Jul 22, 2022 当然是互相妥协一下从 0.5 开始 ε=ε=ε=┏(ロ;)┛ 实际项目中,可以在枚举值最前面加入一个 Invalid\Undefined 的默认枚举值,既满足了从 0 开始,又可以防止有人没初始化搞出奇怪结果 |
68 iseki Jul 23, 2022 via Android 哈,通讯时只要不是紧凑的二进制协议,我倾向于用字符串当枚举值~人类可读,易调试,看见就知道啥意思不用查表 |
69 Aloento Jul 23, 2022 枚举从多少开始这不就是看心情的事情吗( |
70 xumng123 Jul 23, 2022 via iPhone 0 |
71 Chingim Jul 23, 2022 via iPhone 枚举值本来就是无序的有限的状态集合,哪有什么“从哪开始”的说法 抛开具体语言,枚举值不仅仅只能用数字表示,难道用字符表示枚举,还得从 A 开始吗? |
72 zed1018 Jul 23, 2022 使用数字作为枚举值 × 使用单词作为枚举值 √ 我可不想看着字段脑子里还要加载翻译器 (逃 |
73 xaplux Jul 23, 2022 前几天我们前端也问我来着,说数据字典可以从 0 开始么,我说 0 有特殊含义,不可以,她也就没有再问,猜测数据字典一般用于下拉列表,从 0 开始前端方便处理吧 |
74 ydpro Jul 23, 2022 单纯想怼你就是了,下次枚举用雪花算法生成 |
75 Lirika Jul 23, 2022 我习惯从 0 开始 使用的时候可以声明一个数组$a=['a','b','c'] 然后用你返回的枚举就直接取出来 $a[枚举值] |
76 iColdCat Jul 23, 2022 下次给他设计随机数 惯丫毛病 |
77 skinny Jul 23, 2022 除了可以组合状态的枚举类型,不是一般用有意义的字符串名字吗?前端拿到的、发送的也是字符串,这样比较容易理解吧 |
78 brader Jul 23, 2022 我就比较叼了,这东西都是随缘的,今天想从 0 开始就从 0 ,明天想从 1 开始就从 1 |
79 brader Jul 23, 2022 我有时候还是从-1 开始的,哈哈,完全看心情 |
80 brader Jul 23, 2022 @skinny 枚举的键一般是没有什么展示意义的,只要保证唯一即可,对外用户展示的会有一个对应的中文名称。所以枚举值在英文或数字都可的场景下,后端一般会选择数字,是因为数据库存储 tinyint 更高效 |
81 rb6221 Jul 23, 2022 这没什么对错,没必要争啊,自己喜欢用什么就用什么 |
82 tf2 Jul 23, 2022 你就说做一个异常占位的枚举为 0 。正常的都是 1 2 3 开始。 |
83 MEIerer Jul 23, 2022 via Android 充分个毛,不都是 0 开始你吗,那些弱类型语言别人写的时候自然会进行判断 |
84 MEIerer Jul 23, 2022 via Android 不过写好文档的话当我没说 |
85 changnet Jul 23, 2022 就我而言,枚举从 0 开始,但业务逻辑一般是从 1 开始,0 是一个特殊值或者预留的,之前经常看到业务逻辑直接从 0 开始的,后面再定义一个特殊值会非常麻烦,比如 enum Type { NOne= 0, // 未指定 FOO = 1 // 业务逻辑的定义 } |
86 WilliamYang Jul 23, 2022 写 protobuf 时,一般枚举第一个都是 UNKNOWN ,除非 0 值是本身是有意义的,否则就从 1 开始。嗯,你领导是垃圾 |
87 dingyaguang117 Jul 23, 2022 绝大多数情况都建议从 1 开始,0 留给未指定 |
88 dingyaguang117 Jul 23, 2022 枚举还要考虑入库的场景呢, 如果 0 是有意义的, 未收集 /未指定 只能用 null 了。 对于静态类型语言是无尽的烦恼 |
89 shawnsh Jul 23, 2022 via Android 从几开始不用太关注吧 |
90 DoveAz Jul 23, 2022 为了避免不必要的 bug ,最好从 0 开始 |
91 wdhwg001 Jul 23, 2022 这里最佳实践是直接不给枚举的 0 值定义,并且任由它崩溃。 然后在文档里写明 0 值是 Invalid 的,但是代码里不需要把 0 值起名字为 Invalid ,而是直接从 1 开始,跳过 0 。 这样一来,那些没有赋值的枚举们就会直接崩溃,而代码也只需要在入口的地方处理掉这些 0 们,而不是每次写判断的时候脑子里都要带着这个 Invalid 。 |
92 DeWjjj PRO 默认 = 0 ,部分特定写 1 。 文档里面都有,给什么写什么。 |
93 ppllss Jul 25, 2022 从 0 开始 |