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

第一次见以汉字命名的 Java 类

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

    想把简体转成繁体,找了下 util,ZHConverter,看了下源码还以为我的 ide 出问题了 😰

    如图: http://note.youdao.com/noteshare?id=6c2b1a2f774a9818d7e9080ff7bb2b7d

    91 回复  |  直到 2018-10-19 05:01:17 +08:00
        1
    dorothyREN   95 天前
    很灵性
        2
    inreality   95 天前   ♥ 1
    易语言即视感
        3
    boris1993   95 天前 via Android   ♥ 1
    怕不是易语言出身
        4
    agagega   95 天前 via iPhone
    灵性
        5
    molvqingtai   95 天前 via Android
    不错,这样注释都可以省了
        6
    LeeSeoung   95 天前
    应该是 E4J 开发的。
        7
    harde   95 天前   ♥ 1
    讲真,我觉得很好啊。
        8
    fuxiuyin   95 天前 via iPhone
    按理说,只要编译器啥的支持,并没有什么问题呀,变量名啥的不就是为了方便别人理解吗,并不在乎多敲几下键盘,反正 ide 都有自动补全
        9
    tommy94   95 天前
    想起了知乎上一个专栏...
    中文编程 https://zhuanlan.zhihu.com/c_140193266
        10
    murmur   95 天前   ♥ 1
    毕竟这类的功能对的起这个信仰
        11
    hahastudio   95 天前
    看这个像是单字转换的?但难道不是应该按词转换么?
        12
    zjsxwc   95 天前
    抛开中文命名不说,代码写的有点烂
        13
    cedoo   95 天前
    英文 中文杂合, 好难受。
        14
    NicholasYX   95 天前
    牛逼 666
        15
    vevlins   95 天前
    @tommy94 仿佛看到义和团
        16
    zhouyou457   95 天前
    中英文混杂...看得我想死..
        17
    yulitian888   95 天前
    看起来似乎还有短语替换功能???
        18
    misaka19000   95 天前
    中文写代码敲的不累么
        19
    rockyou12   95 天前
    说实话写有些业务的时候真的很想用中文命名,取名字就很难了,还要翻译……还要团队的人都能懂……
    不是很多编译器对非英文字符支持差,变量、类用中文我也觉得不是很大问题
        20
    itqls   95 天前   ♥ 1
        21
    kaifeii   95 天前   ♥ 4
    要是想这么弄,直接全用中文更好,最好语法语序也可以汉语话,可以用古语语法或者白话语法。这样可读性才能达到英文程序语言的水平。
    今有甲,又有乙,合之得丙。//快哉
        22
    AllOfMe   95 天前
    很有艺术感啊
        23
    fly9i   95 天前
    输入法切换能烦死吧?
        24
    KeatingSmith   95 天前
    Java 8 就已经支持中文命名了呀。
        25
    likai   95 天前 via Android
    了解一下易语言作者新作品,火山
        26
    lk1ngaa7   95 天前
    function farmateQuestionInfo() 你怕不怕
        27
    bestkayle   95 天前
    swift 完美支持中文和 emoji
        28
    zsdroid   95 天前   ♥ 2
        29
    Mogugugugu   95 天前
    字符串为 null 居然不是 字符串为空- -
        30
    bravecarrot   95 天前
    难道打汉字不是比打英文麻烦吗
        31
    xuanwu   95 天前   ♥ 12
    多谢试用.
    在下是这个库的作者. 源码在: https://github.com/program-in-chinese/zhconverter
    也是"中文编程"github 讨论组( https://github.com/program-in-chinese ) 和知乎专栏 ( https://zhuanlan.zhihu.com/c_140193266) 的发起人

    回一下上面的:
    个人没有易语言实践经验. 只在探讨 IDE 对中文编程的支持时, 学习了一下它的官方文档: https://github.com/program-in-chinese/overview/issues/11
    这个库的目标主要是尝试用中文命名 API, 的确像上面提到的, 库的功能本身也适合中文命名.
    支持按词转换, 请参考测试用例: https://github.com/program-in-chinese/zhconverter/blob/master/test/com/github/nobodxbodon/zhconverter/%E7%AE%80%E7%B9%81%E8%BD%AC%E6%8D%A2%E6%B5%8B%E8%AF%95%E7%B1%BB.java
    代码定有可改进之处, 欢迎提 issue/PR
    Java 应该在 8 之前就支持 Unicode 命名了

    另外, 我们还汉化了 Junit4 接口: https://github.com/program-in-chinese/junit4_in_chinese
        32
    passerbytiny   95 天前   ♥ 1
    凡是底层 unicode 的,变量名、方法名这种名称性的东西,都可以用中文,以及任何 unicode 范围内的文字。

    java 最晚 1.4 版本的时候,就支持中文变量名。但是编码规范第一条就是:不要用中文。

    我现在 junit 方法名,当分支方法特别多,用英文方法名又长又不直观的时候,回用中文方法名。
        33
    shihunyewu   95 天前
    还可以
        34
    xuanwu   95 天前
    对了, 请用最新的 0.0.5 版, 改正了这个 bug: https://github.com/nobodxbodon/zhconverter/issues/5
        35
    Lighfer   95 天前   ♥ 4
    不支持中文命名,但是在业务性强的系统中,对于实体类和一些常量(仅限实体类、常量)还是推荐使用的,否则很多名词用英语很难表达清楚,关键是换个人来看这代码,看到统一串英文不一定能和中文环境下的名次对上号。
    比如我们开发的一个系统中,有大量这样的名词:
    1. 决定判决情况
    2. 判决情况
    3. 历次减刑情况
    4. 刑罚执行检查档案审查情况
    ...
    这些字段和其他系统是直接相关的(我们这个是辅助系统), 而且随着这个系统支持的业务范围不断的扩大,如果全都使用英文(缩写),维护起来简直就是灾难。
        36
    diggerdu   95 天前 via iPhone   ♥ 1
    @xuanwu 支持
        37
    grewer   95 天前
    我还见过 cs, js, css 都是用中文的,其实都一样,但是打字是真的麻烦
        38
    learnshare   95 天前
    易语言还是挺好的,在英文普遍不好的环境下
        40
    gnaggnoyil   95 天前
    所以简繁转换你们为什么不用 OpenCC...
        41
    easylee   95 天前
    代码里写中文没意义,那么多中文方法名、类名还没英文容易记住......

    我觉得最重要的是社区环境,易语言好就好在他的社区环境是中文,手册也是中文。

    前人遇见的问题后人再来检索方便许多,对外语不熟悉的人群没有语言障碍。
        42
    xuanwu   95 天前
    @zsdroid 多谢演示. 这是我们尝试过中文命名的编程语言列表: https://www.v2ex.com/t/476999#reply0
        43
    DixCouleur   95 天前 via Android
    认识个写 VN.NET ,愣是用出了易语言的感觉
        44
    anyele   95 天前
    怎么智能提示呢
        45
    zonyitoo   95 天前
    从代码质量可以看出来,坚持用中文编程的人的编码水平是什么样的
        46
    xuanwu   95 天前
    @anyele 类似, 先输入第一个汉字.
    github 讨论组里有童鞋之前实现了输入法和 vscode 集成(JavaScript): https://github.com/program-in-chinese/overview/issues/11#issuecomment-320431936
    更近的实现是针对中文版 Typescript 的输入法集成(也是 vscode): https://github.com/program-in-chinese/overview/issues/53#issuecomment-360483892
        47
    samples   95 天前
    @xuanwu 谢谢原作者认真的解答, v2 真神奇哈哈。源码直接贴了出来,作者不要介意哈。
        48
    samples   95 天前
    @inreality 易语言很久远了吧那时我还没接触编程,嘤嘤嘤
        49
    xuanwu   95 天前
    @samples 没事. 当时个人打算也是抛砖引玉. 期待更多更实用的中文 API 出现.
    再说一声, 0.0.5 版还是有点改进的. 欢迎多提意见建议.
        50
    samples   95 天前
    @fly9i 想想都蓝受。。。
        51
    samples   95 天前
    @kaifeii 文言文大佬出没
        52
    samples   95 天前
    @bestkayle var 😊 = "七夕快乐"??
        53
    xuanwu   95 天前
    @samples 关于输入效率问题, 请参考"对在代码中使用中文命名的质疑与回应"中"中文输入太慢, 降低开发效率"一节
    https://zhuanlan.zhihu.com/p/30529835
        54
    samples   95 天前
    @xuanwu 找到了这个最新版了,一开始引用的 maven,按 demo 怎么也找不到 ZHConverter 看了下源码才知道中文命名的
        55
    realpg   95 天前
    @Lighfer #35
    又一个给司法开发过系统的啊 握爪

    我曾经就纠结过一个重要统计字段怎么去命名:

    “已在非本监区但不是社会医院住院超过 7 天不超过 30 天的药品使用总金额”

    后来这个变量被我命名为 var009 注释看文档第 XXX 页
        56
    samples   95 天前
    @Lighfer 我们也在做法律方面的东西呢
        57
    s546360316   95 天前
    没毛病,这叫应对中国国情做出的改变,要想学习
        58
    imikay   95 天前
    可读性还挺好
        59
    Lighfer   95 天前   ♥ 1
    @realpg 这种强业务性的东西,如果全用英文来表达的话,过段时间自己可能就看不懂了,更何况是以后维护换个人来看。所以还是需要具体问题具体分析,不推荐使用中文,但是必要的时候该用还是得用。
        60
    kaedea   95 天前 via Android
    长见识
        61
    ala2008   95 天前
    脑子转不过来。。
        62
    twotiger   95 天前
    我知道 python 和 javascript 都可以支持中文变量,原来 java 也可以啊,挺好玩的
        63
    metrxqin   95 天前
    “已在非本监区但不是社会医院住院超过 7 天不超过 30 天的药品使用总金额”,此时应该发明新的概念名词。

    如果没有人发明 “电脑”这个名词,我们必须像这样描述“ CPU 执行运算,内存辅以贮藏数据的,通过各种外围设备完成人机交互的电子设备”。
        64
    metrxqin   95 天前
        65
    vindurriel   95 天前 via iPhone
    const 和 enum 之类的比较适合 比如 八荣八耻 四个自信 啥的 翻译起来老费劲 比用拼音强 variable 就算了 有一种听外企白领讲洋泾浜的感觉
        66
    rockyou12   95 天前
    @metrxqin 想法很美,但实际业务这种玩意可能几十几百个,各个都要发明不是成语言学家了,而且后面维护代码的人要怎么去理解你发明的名称,去查你编的字典嘛?到最后也还是成了查文档、看注释算球
        67
    realpg   95 天前
    @metrxqin #63
    这种名词有上百个……
        68
    Lighfer   95 天前
    @metrxqin 这种和业务强相关的情况不赞成发明一些新的名词来作解释,量是一个问题,更关键的是无法直接体现出业务方面的东西,而对于后续的维护、扩展来说,如果一个变量 /字段 的业务相关性不够清晰明了的话,会需要花更多的时间来明确,甚至可能到最后都弄错了,而且随着时间的的推移、人员的替换,出现错误的概率会不断升高。
        69
    dhssingle   95 天前
    几年前在 CSDN 上看到的,全中文编程
    https://bbs.csdn.net/topics/380159364
    感受一下


    ```

    遍历器<登录信息>.计数遍历(_详细信息集合).从(0).到(_详细信息集合.长度()).每隔(1).执行((当前行索引, 登陆信息) =>
    {
    判断.如果是(XXX).则(() =>
    {
    判断.如果是(YYY).则(() =>
    {
    表格.行(当前行索引).背景色设为(Color.Gray);
    });
    }).否则(() =>
    {
    判断.如果是(ZZZ).则(() =>
    {
    判断.如果是(KKK).则(() =>
    {
    表格.行(当前行索引).背景色设为(Color.Gray);
    });
    });
    });
    });


    ```
        70
    BXIA   95 天前
    只要看得懂,用 emoji 我的觉得 OK
        71
    MonoLogueChi   95 天前 via Android
    只要编译器不报错就行,用户不会关心你的变量名是啥
        72
    codehz   95 天前
    我记得有一种混淆技术就是直接把标识符替换成汉字(特别是那些在扩展区的汉字),当时很多工具都不支持处理这样的 class 文件(当然现在都支持了,就没啥用了)
        73
    blanu   95 天前 via iPhone
    我只能说,无感,不支持也不反对
        74
    xuanwu   95 天前
    @Lighfer @realpg @vindurriel 同意越是业务性强的部分中文命名越有优势. 个人实践过程( https://www.v2ex.com/t/477109 )中, 多数变量或多或少带有业务语义.
    个人感觉, 与业务语义无关的变量名(或者部分)多数和语言 /框架本身相关, 包括很多核心类中的术语(如 logger, collections, controller 等等), 这些经常一时想不到合适的对应中文. 最近开始的这个项目就是为了辅助解决这个问题: https://zhuanlan.zhihu.com/p/42100391
    这篇在纯算法中用中文命名, 个人认为并非一无是处: https://zhuanlan.zhihu.com/p/33850923
        75
    applehater   95 天前
    @bravecarrot 不知道俄罗斯人用西里尔字母写代码的多不多
        76
    xuanwu   95 天前   ♥ 1
    @applehater @li1215101 这个 2017 年的 quora 答案( http://qr.ae/TUN8ea )提到西门子(德)/爱立信(瑞典)内部有尽量用母语命名的 C/C++项目. 以及布拉格看到的一本编程书也是用母语命名.
    中文命名只是母语命名的一种. 最初在编程语言中添加支持 Unicode 的功能, 也应该有各个非英语母语国家开发者的推动力量.
        77
    leido   95 天前 via Android
    少见多怪,日本人经常这样干
        78
    xuanwu   94 天前
    @leido 请问可以分享一下项目细节吗? 之前也想探寻这样的开源项目, 但在很有限的和日本开发者的交流里, 都提到多数开发者还是用英语命名. 即使"抚子"日语编程语言的作者, 最后还是用了英文命名.
        79
    wolfie   94 天前
    上次项目经理调试接口,返回参数很长而且他英文不好,然后就把字段全部改成中文了。
        80
    jadeity   94 天前
    体会到了母语英语国家的人是真的好理解代码
        81
    AntiGameZ   94 天前
    之前做一些特定行业的项目,专有名词特别多,而且都是那种普通人一眼看上去完全不知道什么意思的名词。但是考虑到和客户更好的沟通,又不能忽视这些名词的存在,英文命名需要纠结很久并且基本上不可能达到 100%准确翻译,回头客户那边看到这些变量还得解释好久。

    遂弄了个示例代码,直接使用中文用做变量名,个人体验良好,程序也没有任何问题。

    奈何甲方也是程序员出生,看到源代码第一时间就怒了,强烈要求改回英文名……
        82
    idtaanlcoe   94 天前 via Android
    难受
        83
    leido   94 天前 via Android   ♥ 2
    @xuanwu 没记错的话,日本开发 Java 用罗马音做方法名,假名做变量名(可能记反),所以对日外包要求日语 N2
        84
    xuanwu   94 天前 via Android
    @AntiGameZ 呵呵 希望随着中文命名的逐渐成熟和普及 包括编码 /命名规范的一致 这样的落花有意流水无情情况会少一些
        85
    NoDocCat   94 天前
    好的, 我注意, 不用汉字了.
    下次写代码, 我用日文怎么样? 或者 Emoji 表情, 你更喜欢哪一个?
        86
    fuyufjh   93 天前 via Android
    反对在代码中用中文,尤其是开源项目。如果做给自己用的,您随意。要是做给别人用的,为什么不尽量多给一些人用呢?

    英语是个包容度很高的语言,对于非 native speaker,你只要用最简单的单词语法就好了,大家都会接受的
        87
    Kyle18Tang   93 天前   ♥ 1
    @fly9i 写代码的中文输入法标点可以设置为英文的
        88
    xuanwu   93 天前
    @fuyufjh
    库 /API 使用什么语言命名应是库开发者的选择. 详请见"中文编程"知乎专栏"Python3 选择支持非 ASCII 码标识符的缘由"一文.
    另有"对在代码中使用中文命名的质疑与回应"中"不利于非中文编程者贡献"一节
        89
    fuyufjh   92 天前
    @xuanwu
    1. 语言本身有义务支持 unicode,但这和鼓励是两码事。比如,你可以把某个函数命名为 `AN_AWESOME_FUNCTION`,编译器不会 warning,然而别人会指责你:这样不符合 convention
    2. 结巴分词这种特例就不要拿出来说了,绝大多数开源项目都是和语言无关的。我开源的目的也不是“吸引外国贡献者”,我只是希望这个代码能帮到更多的人
        90
    xuanwu   92 天前
    @fuyufjh
    > 语言本身有义务支持 unicode,但这和鼓励是两码事

    之前在 Python 官方文档翻译组中建议把中文版的代码中文化, Doc-SIG 的日本翻译组长也有类似回应: 'I think "enabling" to do it and "encouraging" to do it have different bar.' 个人认为这是见仁见智. 感觉这个说法也适用于不少其他的编程语言功能特性.

    > 你可以把某个函数命名为 `AN_AWESOME_FUNCTION`

    我们的出发点是增强代码可读性, 因此会避免使用此类违背可读性的命名方式.
    如果中文命名比起相对应的英文命名明显更不可读, 在个人体验中, 更多的情况是由于中文命名尚有改进空间.
    至于 convention, 现今的代码风格规范基本都源于英语为母语的公司 /开发者. 罔顾具体使用环境而视非英文命名为禁区, 个人认为是固步自封.

    > 绝大多数开源项目都是和语言无关的。我开源的目的也不是“吸引外国贡献者”,我只是希望这个代码能帮到更多的人

    在上文中也提到这与项目目的和作者初衷有关. 从项目总量上来说, 闭源项目远多于开源的, 单人的远多于多人的, 这是个人的估计. 闭源 /单人的项目, 也许更适合中文命名. 至于开源项目, 就像 PEP 3131 提到 API 命名的问题, 就由创作者来自行选择吧.
        91
    xuanwu   32 天前
    @leido 刚发现了一本在例程中使用日语命名的编程书籍"初めてのJavaScript 第 3 版". 译者提到(2016 年 12 月):
    これからは、日本国内をターゲットにした開発では徐々に日本語識別子が使われることになるのでしょう
    在线翻译如下:
    "今后,以日本国内为目标的开发会逐渐使用日语标识符吧"

    请问日本业界是出台了什么命名规范推广日语命名吗?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   885 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 26ms · UTC 18:33 · PVG 02:33 · LAX 10:33 · JFK 13:33
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1