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

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

  •  
  •   514656282 · 340 天前 · 11658 次点击
    这是一个创建于 340 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    大家怎么看待这个问题?

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

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

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

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

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

    public enum Status {
    DISCONNECTED, CONNECTED
    }
        131
    514656282   338 天前
    @banricho 我也很反感数字
        132
    ilaipi   338 天前
    @murmur 这种,在定义的地方,加上中文注释就好了
        133
    DanielNg23   338 天前 via Android
    想象一下如果阿拉伯程序员这么干,然后哪一天我们拿到他们的代码。。。画面太美
        134
    southsala   338 天前
    纯汉字当然不行啊,数据库里状态当然存数字了。。。
    其实枚举可以有这种写法

    /**
    * 申请状态
    */
    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   338 天前
    定义个常量和枚举是 100%有利于重构的, 所以 xxx === 0 这种判断方式基本只有新手或者为了偷懒才会用, 比如只有 0 和 1 的情况下 就会有很多人偷懒, 这很正常, 但是习惯不好, 而 xxx === '普通用户' 这种做法真的不可取
        136
    514656282   338 天前
    @Mitt 后端返回数字的时候前端怎么处理呢?
        137
    Phishion   338 天前
    我觉得你不参与逻辑判断,即 msg="成功",这样的,随便用,如果像 == "新用户",可能会有问题发生。

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

    接口可读性,中文乱码还是要平衡一下的
        138
    crist   338 天前
    规范是人定的,我 tm 说这是规范就是规范。
        139
    3dwelcome   338 天前
    我以前定义接口的时候,都是用散列化值,比如一个中文"断开链接"hash 后,就是 1024。

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

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

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

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