首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

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

  •  
  •   514656282 · 2018-06-17 22:28:36 +08:00 · 12448 次点击
    这是一个创建于 490 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    大家怎么看待这个问题?

    第 1 条附言  ·  2018-06-19 12:45:30 +08:00
    很多人没看懂帖子,我说的这个代码里面的中文跟国际化跟 i18n 没有一点关系,并不是返回给前端展示用的,也跟什么 status,message 没有关系,说明如下

    写前端代码的时候,你们是觉得哪种对于前端来说可读性会更高点? (重申并不是说后端就不用写文档)

    后端返回数字的写法
    <div v-if:="user_type === 0">
    ...显示普通用户面板
    </div>

    后端返回中文的写法
    <div v-if:="user_type === '普通用户'">
    ...显示普通用户面板
    </div>
    151 回复  |  直到 2018-08-05 15:07:51 +08:00
    1  2  
        101
    YMB   2018-06-19 10:44:18 +08:00
    接口规范。
    {
    "status": "4006",
    "message": "服务器错误",
    "mess": "error",
    "data": [
    ]
    }
    也可以参考国内大厂接口规范。
    其中 message 是提供给前端直接弹出的
        102
    murmur   2018-06-19 10:45:09 +08:00   ♥ 1
    @lamCJ 我一个行业甚至是公司的定制软件根本不考虑 i18n 啊
    我可以保证一个公司全用一套操作系统一个 IDE 不就可以了么
    只要有规范什么都不是问题
    命名是个很烦人的问题
    比如电力里的凝汽器 写成拼音 NingQiQi ???即便是学过电力的人也反映不过来这是个什么东西吧
    写成英文的 Condensor 翻译回来叫冷凝器 这个不准确 因为电厂里的行业翻译他就是凝汽器
    其余的就更不说了 比如主副是翻译成 Primary 还是 Main 呢
    纠结这么多 有这时间照着需求文档敲出来就可以了 一下输入法切换和纠结来纠结去死一堆脑细胞那个更好
    一群人怕是认为这个世界除了互联网就是通用软件了吧 没有行业软件的立足之地了么
        103
    loqixh   2018-06-19 10:53:32 +08:00
    @murmur 支持中文
        104
    chaleaochexist   2018-06-19 10:55:56 +08:00
    我还是喜欢用英文.
        105
    chaleaochexist   2018-06-19 10:56:02 +08:00
    或者拼音...
        106
    luoway   2018-06-19 11:01:39 +08:00   ♥ 1
    @chaleaochexist 拼音是绝不能用的,会被英文党和中英党一块儿鄙视
        107
    yulitian888   2018-06-19 11:03:41 +08:00
    其实也不是什么不能忍的事,更搓的也不是没见过。反正我们曾经在代码里用过英文+瑞典文混杂的名词,作为历史遗留问题一直没改过。
    汉字>汉语拼音>多语言混杂>汉语拼音首字母
        108
    ryuzaki113   2018-06-19 11:05:10 +08:00
    这种情况还是写个国际化资源文件,写死中文有点蠢
        109
    IvanLi127   2018-06-19 11:06:14 +08:00 via Android
    代码里有中文呐,不觉得怎么样呢。
        110
    cjw1115   2018-06-19 12:19:45 +08:00
    看你公司啥情况了,要是外企那就妥妥的全英文,要是私企国企啥的,怎么方便怎么来呗
        111
    xuecat   2018-06-19 12:50:24 +08:00
    恩!!!你个人爱好我不会批判。
    但代码用中文就过分了。
    当你在 Windows 写代码的时候,如果设置中国国区,文件编码格式默认是 gbs

    然后你用 git 上传或者其他默认以 utf-8 编码格式打开文件的编辑器打开时,中文会变成一堆乱码。

    然后你的枚举代码就会变成屎,不可读,乱码!!!
        112
    xuecat   2018-06-19 12:51:08 +08:00
    对了 Linux 的文件默认编码格式就是 utf-8
        113
    514656282   2018-06-19 12:51:20 +08:00
    @YMB
    @ryuzaki113
    @adablue77
    @yimity
    @66beta
    @sd
    @fhefh
    @xiaowangge
    @ToT
    @zjp
    大家看看帖子追加的部分吧
        114
    Bramblex2   2018-06-19 12:52:50 +08:00 via iPhone
    反正质量差的,不准备长期维护迭代,尤其是不准备做结构性或功能性的迭代更新的,当然爱怎么搞怎么搞。你就算中文英文拼音混用,一个函数几千行,套几十个 ifelse 都没关系。

    这种情况大部分都在外包公司或者一些所谓的“商业”或者“企业级”软件公司,语言以 java,php,c#为主。

    所以建议跳槽换公司,要不然在公司里面换岗转销售算了,在这样的公司里面做技术一点前途都没有,大概率被迫吃青春饭。
        115
    sampeng   2018-06-19 12:53:44 +08:00
    我可以预感。。你的代码别人接到的第一时间心里就是一句 mmp。。。。
    在代码里面用 0,1,2 这样魔法数字本来就不对。但可以用常量啊。。。ok。就算懒得写常量。自定义一个枚举行不行。变量名是中文这个脑回路很清奇
        116
    514656282   2018-06-19 12:55:08 +08:00
    @sampeng 看看帖子追加部分
        117
    hdr01   2018-06-19 12:56:11 +08:00
    看了追加部分,两种都行吧,不矫情
        118
    sampeng   2018-06-19 12:56:15 +08:00
    ps 你的例子

    后端返回数字的写法
    <div v-if:="user_type === 0">
    ...显示普通用户面板
    </div>

    后端返回中文的写法
    <div v-if:="user_type === '普通用户'">
    ...显示普通用户面板
    </div>


    这么写行不行?
    <div v-if:="isXXX1User()">
    <div v-if:="isXXX2User()">
    <div v-if:="isXXX3User()">

    这样呢?
    <div v-if:="isXXX1User">
    <div v-if:="isXXX2User">
    <div v-if:="isXXX3User">

    如果到处都在用,封个自定义标签可好?

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

    public enum Status {
    DISCONNECTED, CONNECTED
    }
        131
    514656282   2018-06-19 13:42:05 +08:00
    @banricho 我也很反感数字
        132
    ilaipi   2018-06-19 13:44:35 +08:00
    @murmur 这种,在定义的地方,加上中文注释就好了
        133
    DanielNg23   2018-06-19 13:53:42 +08:00 via Android
    想象一下如果阿拉伯程序员这么干,然后哪一天我们拿到他们的代码。。。画面太美
        134
    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;
    }
    }
        135
    Mitt   2018-06-19 14:04:00 +08:00
    定义个常量和枚举是 100%有利于重构的, 所以 xxx === 0 这种判断方式基本只有新手或者为了偷懒才会用, 比如只有 0 和 1 的情况下 就会有很多人偷懒, 这很正常, 但是习惯不好, 而 xxx === '普通用户' 这种做法真的不可取
        136
    514656282   2018-06-19 14:10:01 +08:00
    @Mitt 后端返回数字的时候前端怎么处理呢?
        137
    Phishion   2018-06-19 14:17:47 +08:00
    我觉得你不参与逻辑判断,即 msg="成功",这样的,随便用,如果像 == "新用户",可能会有问题发生。

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

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

    后来同事觉得不方便调试,硬生生把代码全部改成了拼音。谁的地盘谁作主,是中文还是数字,这本没有对错。但强迫别人接受自己的建议,这就不对了。
        140
    lcdxiangzi   2018-06-19 14:27:05 +08:00
    中文做判断条件真的有坑,我碰到过一个项目就是中文做判断条件,结果有次因为字符集出现乱码,然后就悲剧了。
        141
    lcdxiangzi   2018-06-19 14:40:48 +08:00
    所有回复看了一遍,发现我们公司就 tm 是个大坑,和外面的差距大概在 5-10 年。。。
        142
    saulshao   2018-06-19 14:58:05 +08:00
    实践经验告诉我,大概是如下的情况:
    1. 用数字确实会导致代码传承过程中的理解问题
    2. 用中文则可能会导致字符串编码问题
    3. 楼主最后补充的那段,无论你用什么语言写代码,应该相关的书都会告诉你先用个枚举,然后再做类似的判断......
    我的结论:
    1. 建议定义枚举变量,不要直接在代码里面写楼主举例的判断语句,至于枚举变量本身,我还是建议用英文。原因其实很简单:没人可以预测未来,谁知道自己的代码有一天会不会用到别的地方?
        143
    cout2013mr   2018-06-19 15:38:08 +08:00
    想起来以前见过一个大佬写了这样的代码:
    if(user.name == '张三'){
    ……//有权审批
    } else if(user.name == '李四'){
    ……//有权查看
    } else {
    ……//无权
    }
        144
    OSF2E   2018-06-19 17:08:34 +08:00
    我推荐你按前端的方式来,除了注释,我不喜欢代码的任何地方出现中文,总感觉不美观,反之也是一样,中文文章里面突然冒几个单词,总感觉有违和谐。

    当然,如果 IDE 字体选的好,可以避开这个问题。
        145
    shenjo   2018-06-19 17:20:41 +08:00
    关于追加的部分有一个小疑问:
    为什么不写成函数呢? 我管你是 user_type === 0 还是 user_type === '普通用户',封装成函数,想怎么实现怎么实现

    v-if='isNormalUser' 可读性不更高吗
        146
    annielong   2018-06-19 18:05:54 +08:00
    还是不建议用中文,说不定哪里就会遇到编码的坑,至于用数字这个,一般都是提前做预定义的,有的时候用英文短句也很麻烦,尤其是几个词义相近的时候,
        147
    ToT   2018-06-19 21:56:44 +08:00
    要是你们有文档或者 config 文件把所有变量都提前定义好,那还好一些。枚举一下:"普通用户", "普通用户(活动)", “乞丐用户”, “金主”
        148
    947211232   2018-06-19 22:41:17 +08:00
    长远考虑:扩展、兼容环境等不建议使用中文;
        149
    ofooo   2018-06-20 10:13:20 +08:00
    我自己代码里有,方便。给公司的代码里没有,绞尽脑汁想变量名~~~
        150
    thinkmore   2018-06-21 09:56:17 +08:00
    可能这个已经是后台国际化返回给前台的内容了。

    至少我们是这么干的,前台接受到的已经是国际化之后的数据了
        151
    xuanwu   2018-08-05 15:07:51 +08:00
    支持! 至今在 Java/JavaScript/Python 等环境里使用中文命名, 只要框架支持, 还没有发现运行出问题的. Sprint Boot 例子: https://cn.v2ex.com/t/477003
    欢迎到知乎"中文编程"专栏分享经验体会!
    1  2  
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4299 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 45ms · UTC 02:33 · PVG 10:33 · LAX 19:33 · JFK 22:33
    ♥ Do have faith in what you're doing.