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

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

  •  
  •   samples · 2018-08-17 10:11:18 +08:00 · 15748 次点击
    这是一个创建于 2319 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    前人遇见的问题后人再来检索方便许多,对外语不熟悉的人群没有语言障碍。
    xuanwu
        42
    xuanwu  
       2018-08-17 14:26:13 +08:00
    @zsdroid 多谢演示. 这是我们尝试过中文命名的编程语言列表: https://www.v2ex.com/t/476999#reply0
    DixCouleur
        43
    DixCouleur  
       2018-08-17 14:29:00 +08:00 via Android
    认识个写 VN.NET ,愣是用出了易语言的感觉
    anyele
        44
    anyele  
       2018-08-17 14:38:38 +08:00
    怎么智能提示呢
    zonyitoo
        45
    zonyitoo  
       2018-08-17 14:44:54 +08:00
    从代码质量可以看出来,坚持用中文编程的人的编码水平是什么样的
    xuanwu
        46
    xuanwu  
       2018-08-17 14:47:46 +08:00
    @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
    samples
        47
    samples  
    OP
       2018-08-17 14:54:32 +08:00
    @xuanwu 谢谢原作者认真的解答, v2 真神奇哈哈。源码直接贴了出来,作者不要介意哈。
    samples
        48
    samples  
    OP
       2018-08-17 14:55:30 +08:00
    @inreality 易语言很久远了吧那时我还没接触编程,嘤嘤嘤
    xuanwu
        49
    xuanwu  
       2018-08-17 15:01:51 +08:00
    @samples 没事. 当时个人打算也是抛砖引玉. 期待更多更实用的中文 API 出现.
    再说一声, 0.0.5 版还是有点改进的. 欢迎多提意见建议.
    samples
        50
    samples  
    OP
       2018-08-17 15:02:57 +08:00
    @fly9i 想想都蓝受。。。
    samples
        51
    samples  
    OP
       2018-08-17 15:04:33 +08:00
    @kaifeii 文言文大佬出没
    samples
        52
    samples  
    OP
       2018-08-17 15:05:49 +08:00
    @bestkayle var 😊 = "七夕快乐"??
    xuanwu
        53
    xuanwu  
       2018-08-17 15:06:26 +08:00
    @samples 关于输入效率问题, 请参考"对在代码中使用中文命名的质疑与回应"中"中文输入太慢, 降低开发效率"一节
    https://zhuanlan.zhihu.com/p/30529835
    samples
        54
    samples  
    OP
       2018-08-17 15:08:19 +08:00
    @xuanwu 找到了这个最新版了,一开始引用的 maven,按 demo 怎么也找不到 ZHConverter 看了下源码才知道中文命名的
    realpg
        55
    realpg  
       2018-08-17 15:09:16 +08:00
    @Lighfer #35
    又一个给司法开发过系统的啊 握爪

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

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

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

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


    ```

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


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

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

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

    英语是个包容度很高的语言,对于非 native speaker,你只要用最简单的单词语法就好了,大家都会接受的
    Kyle18Tang
        87
    Kyle18Tang  
       2018-08-19 10:33:58 +08:00   ❤️ 1
    @fly9i 写代码的中文输入法标点可以设置为英文的
    xuanwu
        88
    xuanwu  
       2018-08-19 15:28:44 +08:00
    @fuyufjh
    库 /API 使用什么语言命名应是库开发者的选择. 详请见"中文编程"知乎专栏"Python3 选择支持非 ASCII 码标识符的缘由"一文.
    另有"对在代码中使用中文命名的质疑与回应"中"不利于非中文编程者贡献"一节
    fuyufjh
        89
    fuyufjh  
       2018-08-20 11:34:34 +08:00
    @xuanwu
    1. 语言本身有义务支持 unicode,但这和鼓励是两码事。比如,你可以把某个函数命名为 `AN_AWESOME_FUNCTION`,编译器不会 warning,然而别人会指责你:这样不符合 convention
    2. 结巴分词这种特例就不要拿出来说了,绝大多数开源项目都是和语言无关的。我开源的目的也不是“吸引外国贡献者”,我只是希望这个代码能帮到更多的人
    xuanwu
        90
    xuanwu  
       2018-08-20 13:48:53 +08:00
    @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 命名的问题, 就由创作者来自行选择吧.
    xuanwu
        91
    xuanwu  
       2018-10-19 05:01:17 +08:00
    @leido 刚发现了一本在例程中使用日语命名的编程书籍"初めてのJavaScript 第 3 版". 译者提到(2016 年 12 月):
    これからは、日本国内をターゲットにした開発では徐々に日本語識別子が使われることになるのでしょう
    在线翻译如下:
    "今后,以日本国内为目标的开发会逐渐使用日语标识符吧"

    请问日本业界是出台了什么命名规范推广日语命名吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   899 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:09 · PVG 06:09 · LAX 14:09 · JFK 17:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.