代码里面有中文,大家觉得怎么样?

2018-06-17 22:28:36 +08:00
 514656282

举个简单的例子,如下,平时写代码的时候一些枚举的状态我比较倾向直接用中文,包括前端传参和返回给前端的内容,个人认为这样可读性会高一点。

做了三年 Android 开发,以前对接后端接口的时候经常都是一堆数字 0123,每次查问题或者抓包的时候都要看看代码(后端基本不写文档,返回的一大堆无用的字段),所以现在转后端了,写接口的时候都会尽量考虑减少前端的对接的难度

public enum Status {
    网络断开, 网络恢复
}

同事认为这样很不规范,叫我以后不要这样写了,要么用英文,要么用数字 0, 1, 2, 3

大家怎么看待这个问题?

16312 次点击
所在节点    Java
152 条回复
514656282
2018-06-19 13:01:11 +08:00
@sampeng 还有,别人已经写好的代码我不会随便去改,也没有强迫别人改成我的习惯,在这里只是一个讨论
boris1993
2018-06-19 13:02:39 +08:00
@514656282 所以这就体现出了接口说明文档的重要性。定好接口,有了文档,再有人问就竖个中指喊 RTFM (逃
sampeng
2018-06-19 13:06:26 +08:00
@514656282 第一。。我都能抓包了,能不能直接 debug ?优先 debug 或者自己编译个 debug 版看日志。第二。一个 app 项目,总不能到处都是 1234 吧。那一定是接口设计上有问题。1-2 个,其实记得差不离。如果很多。顺手打开定义项也就顺手的事。第三,此类类型判断,用 bool > 数字 >字符串。因为从数学的角度来看,出错率最低。字符串是可能会是任何字符串,这样说不知道你是否能理解。==,===,还有重载操作符的各种语言。都会有可能会有坑。。。。第四,安全性考量,类型都是数字,根本无法判断到底什么意思,要根据上下文来。但是如果是中文。。恩这个请求是普通用户。那改成超级用户试试?
sampeng
2018-06-19 13:08:09 +08:00
@514656282 我做前后端都不喜欢写文档。。。做后端不喜欢写,做前端的时候也不喜欢看。你给我例子就好。。。改接口就几分钟的事。看个语意不清或者很乱的文档浪费时间。。我喜欢直接调接口看看到底是什么。有接口我就去看接口文档,没接口文档直接叫人过来问号了。。后端同理。。只要前后端两边合作时间长默契了。。都其实不是什么大问题
514656282
2018-06-19 13:10:18 +08:00
@sampeng 写文档并不只是开发的时候会用到,后面维护,或者交接给别人的时候也有很大帮助的
sd
2018-06-19 13:10:19 +08:00
@514656282 如果是第一种 user_type === 0,我会在代码里面加注释说明是普通用户,你也可以向上面有人提到的写成 NORMAL_USER。我觉得你用第二种 user_type==='普通用户' 这个也 OK,和后端商定好就可以。我自己更倾向用变量 > 用数字+注释 > 普通用户。
sampeng
2018-06-19 13:16:57 +08:00
@514656282 我知道啊。。但我懒啊。。所以做后端的时候用接口自动生成工具。。。做前端的时候还好,不用写文档。。但其实写了我自己都懒得去看。看代码就够了,包括交接别人的旧代码,看文档的时间已经把代码看 n 遍了
514656282
2018-06-19 13:27:40 +08:00
@sampeng 文档都不写,下一个接手的一定会亲切问候你的😄 逃
banricho
2018-06-19 13:36:05 +08:00
实名反对 0 1 2 3,有文档也不行
中文不赞成,建议是语义化的英文
metrxqin
2018-06-19 13:41:42 +08:00
反对,建议使用英文。

public enum Status {
DISCONNECTED, CONNECTED
}
514656282
2018-06-19 13:42:05 +08:00
@banricho 我也很反感数字
ilaipi
2018-06-19 13:44:35 +08:00
@murmur 这种,在定义的地方,加上中文注释就好了
DanielNg23
2018-06-19 13:53:42 +08:00
想象一下如果阿拉伯程序员这么干,然后哪一天我们拿到他们的代码。。。画面太美
southsala
2018-06-19 14:01:07 +08:00
纯汉字当然不行啊,数据库里状态当然存数字了。。。
其实枚举可以有这种写法

/**
* 申请状态
*/
public enum APPLY_STATUS {
DRAFT(1, "草稿"), DOING(2, "办理中"), FINISH(3, "已结束");

public int value;
public String valueName;

private APPLY_STATUS(int value, String valueName) {
this.value = value;
this.valueName = valueName;
}

public static String valueOf(int a) {
String tmp = "";
for (int i = 0; i < values().length; i++) {
if (values()[i].value == a) {
tmp = values()[i].valueName;
break;
}
}
return tmp;
}
}
Mitt
2018-06-19 14:04:00 +08:00
定义个常量和枚举是 100%有利于重构的, 所以 xxx === 0 这种判断方式基本只有新手或者为了偷懒才会用, 比如只有 0 和 1 的情况下 就会有很多人偷懒, 这很正常, 但是习惯不好, 而 xxx === '普通用户' 这种做法真的不可取
514656282
2018-06-19 14:10:01 +08:00
@Mitt 后端返回数字的时候前端怎么处理呢?
Phishion
2018-06-19 14:17:47 +08:00
我觉得你不参与逻辑判断,即 msg="成功",这样的,随便用,如果像 == "新用户",可能会有问题发生。

如果你觉得 ==1 ==2 ==3 搞不清楚的话,可以让他们换成 == new_user 这样的,或者 is_new_user == 1 这样的。

接口可读性,中文乱码还是要平衡一下的
crist
2018-06-19 14:18:25 +08:00
规范是人定的,我 tm 说这是规范就是规范。
3dwelcome
2018-06-19 14:23:27 +08:00
我以前定义接口的时候,都是用散列化值,比如一个中文"断开链接"hash 后,就是 1024。

后来同事觉得不方便调试,硬生生把代码全部改成了拼音。谁的地盘谁作主,是中文还是数字,这本没有对错。但强迫别人接受自己的建议,这就不对了。
lcdxiangzi
2018-06-19 14:27:05 +08:00
中文做判断条件真的有坑,我碰到过一个项目就是中文做判断条件,结果有次因为字符集出现乱码,然后就悲剧了。

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

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

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

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

© 2021 V2EX