
举个简单的例子,如下,平时写代码的时候一些枚举的状态我比较倾向直接用中文,包括前端传参和返回给前端的内容,个人认为这样可读性会高一点。
做了三年 Android 开发,以前对接后端接口的时候经常都是一堆数字 0123,每次查问题或者抓包的时候都要看看代码(后端基本不写文档,返回的一大堆无用的字段),所以现在转后端了,写接口的时候都会尽量考虑减少前端的对接难度
public enum Status {
网络断开,网络恢复
}
同事认为这样很不规范,叫我以后不要这样写了,要么用英文,要么用数字 0, 1, 2, 3
大家怎么看待这个问题?
1 chnhyg 2018-06-17 22:37:27 +08:00 为什么不用英文呢? public enum NetworkStatusEnum { Connected, Disconnected, ... } |
2 xujinkai 2018-06-17 22:38:27 +08:00 via Android 中文解码错误就整体悲剧了... |
4 zjp 2018-06-17 22:42:09 +08:00 via Android 用数字的话还要 enum 干嘛,甚至还不如中文。除非同时返回 status 和 message |
6 ho121 2018-06-17 22:45:17 +08:00 via Android @514656282 再复杂也可以用英文。像你这样说,国外 it 公司都该怎么办。 不用中文首先是习惯问题。然后中英文切换会很烦(比如在 vim 中切换中英文)。最后,中文编码问题比较明显,兼容性也可能有问题 |
7 rockyou12 2018-06-17 22:46:03 +08:00 很多时候部署的环境一变,真的可能有很多奇奇怪怪的问题,哪怕是 c#或者 go 这种对 utf-8 支持得非常好的语言…… |
8 514656282 OP @zjp 公司的后端一般都是返回 {"status": 0}这种,不存在 enum,然后用聊天工具告诉你一下这些数字代表什么意思 |
9 U7Q5tLAex2FI0o0g 2018-06-17 22:47:22 +08:00 说句难听的……很奇葩…… |
12 geelaw 2018-06-17 22:54:43 +08:00 enum 成员的名字必须是标识符,因此不可以是数字开头,自然也不能是数字。 Java 允许汉字作为标识符,因为汉字属于 Lo Unicode 一般类(这类字符都允许作为标识符的一部分)。 “不规范”应该是说你们的团队规范,看待方式是 be compliant. |
14 HangoX 2018-06-17 22:58:14 +08:00 不瞒楼主,我干过这事情,其实没问题的,但是我应对的场景更复杂。想想你写了英文,最后因为过于复杂,还是要看注释,还不如直接用中文。Java 是天生支持中文的,用的都是 AS,没有编码问题。 |
16 q397064399 2018-06-17 23:02:23 +08:00 @514656282 #8 JPA 默认序列化的 ENUM 是字符串 |
18 changnet 2018-06-17 23:08:43 +08:00 via Android 不同的机器,不同的终端,不同的编辑器,不同的语言交互,出问题你就知道有多麻烦。当然你硬要说现在程序能跑,没问题,那也没问题。 |
19 yimity 2018-06-17 23:09:23 +08:00 via Android 一定要用数字,不然产品让你改成网络已断开,网络已连接,你怎么办? |
20 楼主没有经历过 vs 和 eclipse 混用的时代,某个人一不小心一个操作导致代码所有中文全部乱码,包括注释,没有注意到就提交了,这时候再有个人操作一下有可能乱套了,可能都没法还原,所以那个时代经常会看到一些小公司的项目代码总有些奇奇怪怪的乱码 |
21 jmc891205 2018-06-17 23:13:28 +08:00 写代码的时候还要中英文切换不会很麻烦吗 |
22 ToT 2018-06-17 23:18:36 +08:00 写注释用中文没问题。其他的话,就看你们怎么协调沟通了。API 的话,最好有一个统一的信息吧? |
23 thread2 2018-06-17 23:20:18 +08:00 可以的,之前我们数据库表名也是中文的,软件照样卖好价钱 |
24 f2f2f 2018-06-17 23:20:32 +08:00 个人觉得你要是内部前后端协作完善的话应该避免这种情况 不过要是随便一写倒也无妨,毕竟对于国人这种代码看着方便 |
25 murmur 2018-06-17 23:22:23 +08:00 utf8 编码普及了应该是可以的 估计都是在互联网公司呆惯了 没开发过行业软件 一般的生活软件还可以英文 行业软件英文不会写写拼音 还有的普通话不标准粤语四川话都写到变量里了 所以想来想去中文变量名真不错 |
26 LukeEuler 2018-06-17 23:22:58 +08:00 只要团队规范一致,就可以了,没问题。(个人觉得不爽的是等宽字体的问题,这个会把我逼疯的) |
29 zj299792458 2018-06-17 23:55:16 +08:00 via iPhone 写中文真的不会有编码问题么……我的 IDE 都是默认 UTF8 |
31 zjsxwc 2018-06-17 23:59:03 +08:00 via iPhone 返回个{"status": "网络恢复"}我觉得很奇怪。 反倒是用数字更加灵活,语意更加丰富,考虑下面的这些情况: 1. 有国际化多语言需求时,新增国家语言时,把“网络恢复”翻译成别的语言,和把数字翻译成别的语言,我觉得还是数字方式顺眼。 2. 业务上的改动对原先的 status 更加细化的需求,比如原先的采购只有“直接发布未报价,被报价,被采纳”,变成了“直接发布待审核,审核通过未报价,被报价,被采纳”,这时本质上其实是原先的“直接发布未报价”变成了现在的“审核通过未报价”,如果用中文等语言写死的话后面的人就还不来了,但如果是数字的话只要给新的“待审核”分配个新数字就行。 |
32 514656282 OP @zjsxwc 返回这个中文真的不是用来给前端直接显示,就跟返回数字一样,返回 0 的时候需要做 xxx 处理,返回 1 的时候要做 xxx 处理,只是在编辑代码上,不需要再备注 0 是什么意思 1 又是什么意思这样。 |
33 gamexg 2018-06-18 00:35:31 +08:00 via Android 虽然没用中文, 但是现在觉得真用也没什么,各种环境应该不会再碰到不支持中文的情况了。 楼上说可能有团队成员提交成乱码,我觉得这里的问题不是中文,而是没统一规定编码。 即使变量不是中文,国内注释也一点中文没有的不多吧?注释全部变成乱码也是不可接受的。 反对代码内硬编码数字,接口返回数字没问题。 |
34 JCZ2MkKb5S8ZX9pq 2018-06-18 00:42:42 +08:00 其实有些情况下用中文无可厚非吧,msg、注释甚至部分 json 的 key。 - 不少程序员的英文水平堪忧,字段名瞎起,不同人读可能会有误解。 - 母语理解不容易有误差,而且很可能更精确简短。 - 最终应用场景是中文,经常碰到 中文 到 英文(数字码) 再回 中文 的情况,匹配起来繁琐。 之前搞基金,各个平台的中文称呼都很规范一致,英文命名就各有一套,很麻烦。最近弄淘宝,也碰到类似问题。 |
35 xlouis 2018-06-18 02:15:24 +08:00 via Android 可以看一下 HttpStatus 的那种枚举类,感觉比较好一点 |
36 Perry 2018-06-18 02:46:13 +08:00 有没有考虑过自动补全? |
37 pinews 2018-06-18 05:24:38 +08:00 用中文我是支持的,但是我不支持用中文是为了解决一些问题,或者中文会造成什么问题。 这不仅是个技术问题,更是个责任问题。 ----说不规范只是个借口,但是如果出了问题谁来承担责任,这个问题楼主想过吗?如果楼主拍拍胸脯说没问题,我倒觉得有改变的可能 从论坛的情况来看,大部分还只是技术的奴隶,负担不起改造世界的责任,楼主需要付出更多的努力才行。 |
38 fuermosi777 2018-06-18 05:32:16 +08:00 按住 ctrl 跳转单词的时候 遇到中文就一个字一个字跳 |
39 opengps 2018-06-18 05:43:45 +08:00 via Android 总会遇到些奇葩情况的,你可以当探索者去爬一遍前人爬过的坑,总结出同样的结论 |
40 Syaoran 2018-06-18 05:55:32 +08:00 via Android 个人觉得频繁切换输入法好麻烦…… |
41 514656282 OP @fuermosi777 中文也是一整个词的跳转 |
43 swkl86 2018-06-18 06:42:11 +08:00 via Android 不反对,但是有一天突然某个业务场景这样判断 if(status == 网络连接失败) emmmm 确定不奇怪麽? enum 当做字符串处理? 数据库库字段中文? 好吧,感觉好多人做过,但总感觉坑比体验多 感觉这个属于团队规范问题,以前也想过类似情况,但是后面被 pass 了。 因为代码不是你一个人维护,编码导致的风险隐患比想象中的要高,假如说给外界接口,成本更加高昂(维护成本) 你的痛点是在于对接的时候交流开发和维护成本高昂 你是希望通过提升开发体验降低对接难度 但是这侧面也会导致增加各种隐患风险和维护成本 总之个人感觉 code msg 基本够用,如果不够,或者希望更详细的提示可以考虑开发环境判断,多个其他输出方式或字段 |
44 Cambrian07 2018-06-18 07:05:16 +08:00 via Android 所以,易语言的春天到了吗? |
45 xingstar 2018-06-18 07:14:18 +08:00 via Android 抱歉,总觉得难以接受 |
46 PythonAnswer 2018-06-18 07:31:34 +08:00 via iPhone 自己写的小工具,有很多注释是中文,没问题啊,整理思路。 |
47 vjnjc 2018-06-18 07:55:58 +08:00 via Android 感觉 enum 那部分你随便呗,对接接口 HTTP 那层确定好就好 |
48 nicevar 2018-06-18 07:57:59 +08:00 via iPhone @gamexg 不是统不统一编码的问题,是 ide 有编码检测,vs2003 有个坑人的地方,会自动修改 utf8 的 bom,加上 eclipse 以前有一个常年存在的 bug,当前显示的文件并不是活动文件,很容易出错,并不是个别现象 |
49 0xcb 2018-06-18 08:08:17 +08:00 via Android 我见过一个新入职的这么写,然后两个月个月什么也没做出来走了。 |
50 514656282 OP @JCZ2MkKb5S8ZX9pq 说出了我很多没说出来的。。实际开发中很多人用的英文并不准确,后面加又要加中文注释来说明 各种英文数字中文的转换确实让人累了 |
51 shynome 2018-06-18 09:37:51 +08:00 via Android 中文切输入法麻烦,反正我肯定忍不了,要么你走要么我走 |
52 likuku 2018-06-18 09:52:04 +08:00 给人类用户看的提示信息什么用中文写挺好的,尤其用户是非技术人员+多年不用英文 /技术英文 的人。 其它么,代码里 变量,注释,用中文,写码时切换输入法麻烦, 乱码的隐患始终存在,且有些技术用语,中文没有统一公认的说法,容易引起歧义。 |
53 lonenol 2018-06-18 09:57:45 +08:00 展示的文案竟然是固定的么。。。 |
55 whypool 2018-06-18 10:28:13 +08:00 一次警告,二次开除 代码必须规范,命名必须规范,包括拼音命名甚至各种 123,review 必须改,改不了就走人 |
56 msg7086 2018-06-18 10:58:51 +08:00 看团队要求。团队觉得 OK 就 OK,不行就不行。 我们组里以前还有亚美尼亚人,他要是标识符写个亚美尼亚语,我们大概心态就要崩了。 |
57 thinkif 2018-06-18 11:02:42 +08:00 via iPhone 变量不能用中文,但个别的枚举可以用中文,可读性好,使用也方便,枚举最终对接出去的多是数字的部分所以没问题,而且现在 IDE 对编码支持都非常好了。 其实不光是中文,工作中接触过德国、意大利和丹麦的工程师,他们也会使用母语来命名一些不好描述或者不方便翻译成英文的地方。 |
58 silhouette 2018-06-18 11:21:48 +08:00 via Android 一般都是 status 是个数字表示状态码吧,然后给一个文档标注每个数字代表什么比较好? |
59 lotem 2018-06-18 11:32:16 +08:00 |
60 liuxu 2018-06-18 11:49:17 +08:00 主要是大家被一些语言的中文处理恶心到了,还有中文编码问题,例如 与 utf-8,bom 头。。 |
61 maxthon 2018-06-18 12:00:45 +08:00 http://www.globalnerdy.com/wordpress/wp-content/uploads/2014/06/poopy-swift-code-example.jpg 现在 unicode 支持都很成熟了吧,emoji 都可以用来做标示符了 所以还是看项目需要以及项目规范 有些中文术语真的很难用英文表达 |
63 lrh3321 2018-06-18 12:28:42 +08:00 via Android 团队觉得 ok 就行,我是觉得中英文切换打字太麻烦 |
64 WispZhan 2018-06-18 12:34:30 +08:00 via Android 明显不规范,Java 枚举本来就可以带成员域,你加个 string 类的 name 域都比直接用中文好。 public enum Status { Connected(“网络恢复”), Disconnected(“网络断开”); private string name ; Status(string name){ this.name=name ; } public string name(){ return name ; } } |
65 AV1 2018-06-18 12:34:37 +08:00 看你们团队的想法吧。 反正这个年代已经没必要纠结所谓的乱码问题了。 |
66 Lonely 2018-06-18 12:35:06 +08:00 via iPhone 奇葩 |
67 murmur 2018-06-18 12:36:39 +08:00 @likuku 问题是又有专业英语知识又有编程技能的程序员少之又少 绝大多数人在面对专业术语都是去查字典 他也不知道哪个对 这种情况下用中文命名反倒是效率最高的 直接照着需求说明书打就行 省了大笔想变量名的时间 |
68 514656282 OP @WispZhan 给前端返回的时候,前端又看不到你这个成员变量,英文单词没取好的时候,也给别人带来很多困惑 |
69 swim2sun 2018-06-18 12:55:41 +08:00 个人或团队爱怎么用就怎么用,但是既然拿出来问了,我还是忍不住说:请遵守 Java 命名规范。枚举就是要大写字母加下划线命名,如果非要用中文,那么为什么不用得彻底点?类名、变量名都用中文?你可以体验一下.... public enum 状态 { 网络断开, 网络恢复 } |
70 hilow 2018-06-18 13:03:12 +08:00 via Android 有种情况会很恶心。 你的模块给另外一个模块传输的是 protobuf 再内嵌 json 数据,然后这个模块输出日志时,有可能是编码过的 utf8 字符 |
71 zjyl1994 2018-06-18 13:22:32 +08:00 via Android 返回给前端的 message 写中文不反对,code 写中文就不好了吧。 |
72 WispZhan 2018-06-18 14:12:23 +08:00 @514656282 自定义一个枚举序列化工具不就成了么,多大的事。如果是 Jackson 或者 gson 本身就自带了。 多看看文档和最佳实践。 |
73 xiaowangge 2018-06-18 14:26:19 +08:00 i18n 国际化怎么办? 万一项目大火,国外业务也要开展呢 |
74 Finest 2018-06-18 14:38:33 +08:00 切换输入法不累吗。 |
76 rzti483NAJ66l669 2018-06-18 15:29:48 +08:00 参考 HTTP 状态码 |
77 atcdef 2018-06-18 16:56:38 +08:00 中文完全没问题,这里的问题只是在于输入上的麻烦,你得切换输入法。如果有某个 ide 像易语言那个 ide 那样,支持中文首拼上屏,那我也会用中文作为变量名之类的。 |
78 copysunday00 2018-06-18 17:29:16 +08:00 难以接受,目前在公司还没发现 |
79 mio4kon 2018-06-18 17:35:13 +08:00 代码补全,切换输入法相当麻烦. |
80 cYcoco 2018-06-18 18:16:52 +08:00 宁愿代码英文注释中文的 因为编码问题真的很捉急。。。。但是 emun 写 0,1,3 不如返回 int 好了 |
81 DonaidTrump 2018-06-18 19:07:09 +08:00 via iPhone 如果是一个开源项目,中国人贡献汉语代码,韩国人贡献汉语代码,阿拉伯人贡献阿拉伯语代码。。。。。后果不忍直视 |
83 DonaidTrump 2018-06-18 21:22:04 +08:00 via iPhone @wwqgtxx 打错了,韩语代码 哈哈哈 |
84 fhefh 2018-06-18 22:08:36 +08:00 一般都是这么干来着~ {"status": 0, "msg":"你好,欢迎来到 V2ex"} |
85 zhuangzhuang1988 2018-06-18 22:10:02 +08:00 挺好的比不知所云的拼音,缩写好。 |
87 sd 2018-06-19 02:45:17 +08:00 可读性不高的问题,我也是赞成使用 status 和 msg。 考虑到前端对接难度的问题,我建议写好 API 文档,API 文档应该是必须的。 |
88 littlebaozi 2018-06-19 08:52:47 +08:00 用数字吧,注释写明白 |
89 66beta 2018-06-19 08:55:43 +08:00 ”后端不写文档” 头痛不能医脚 |
91 jyf 2018-06-19 09:44:11 +08:00 我比较喜欢用英文和数字 但是我不会去反对你用中文 你这个是提示 提示越清晰越好 楼上有人说编码问题 这个年代还用 gb*的基本很罕见了 大家都是 utf8 没啥不一样的 |
92 micean 2018-06-19 09:55:35 +08:00 要是名字不好起呢? 中文 enum 的最大好处是智能提示一出来就明白是什么意思 至于用数字还是字符串,可以用成员变量解决 |
95 adablue77 2018-06-19 10:17:21 +08:00 10001 用户验证失败 ... 直接提示用户错误信息 10002 您的余额不足 ... 给予提示 并显示余额和充值按钮 10003 用户登陆超时 ... 提示错误 过 N 秒后跳转到登陆页 10004 您的权限不足 ... 直接提示用户错误信息 假设上面是一个接口可能返回的集中数据 现在不返回状态码了 请问楼主前端如何实现流程呢 |
96 iblessyou 2018-06-19 10:32:00 +08:00 @fuermosi777 和你学了一技,用这么久居然不知道 /笑哭 |
97 rocbomb 2018-06-19 10:35:42 +08:00 已经有公司开始中文编程了 没任何问题, 他们用的是 C# 当年的帖子没了, 找个转载 http://www.cnblogs.com/kernel64/archive/2014/06/06/3771658.html 输入法把全角改成半角, 没有任何问题 我们公司没那么激进,只是注释全部都是中文 目前没有任何问题 |
98 murmur 2018-06-19 10:37:32 +08:00 @yimity 我不知道你回的哪一条 但是这个只是楼主例子的 enum 不规范 反正 enum 就是 int 如果你不习惯 java 的 enum 写法 直接写一个类 里面写一堆中文 static 变量指向你的状态码就可以 他是变量不就可以扩展 可以 IDE 重构了么 我还是哪句话 这个楼里太多人纠结枚举的例子 中文既然可以拿来做数据库字段 那以后如果有规范的话拿来做变量名甚至函数名也是可以的 起名一直是个很纠结的问题 尤其是涉及到太专业你查字典就查不明白的东西 |
99 lamCJ 2018-06-19 10:38:22 +08:00 via iPhone 不怎么样: - 效率低:编码一天 输入法切换次数不能忽略 - 沟通难:自己一队中国人可能无所谓 但是英文世界都能理解 更别提 i18n 了 - 恐乱码:虽然你的编程环境对 unicode 支持很好 但是代码 /数据 可能会在各种各样的步骤 /环境 /编码中出现 最终格式无法保障 ascii 码大法好 换成中文解决不了 “后端不写文档”的问题 也不能完全解决“更容易理解”的问题(人水平+必要的注释+文档才是) 也并没有解决“前端不方便对接”的根本问题(人水平+流程+文档) 退一万步 命名用拼音也比中文好啊 … 带有个人感情色彩的强迫症结论:要用中文就全部用中文(可惜还做不到)要英文就全部英文 半英半中的感觉就和听见有些人说中文说着说这飙几句英语单词一样 你懂的吧 |
100 reus 2018-06-19 10:39:36 +08:00 我觉得不行,输入法切换太麻烦 |