有没有人使用中文命名变量? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Vinty
V2EX    问与答

有没有人使用中文命名变量?

  •  
  •   Vinty 2021-02-03 17:15:46 +08:00 2247 次点击
    这是一个创建于 1789 天前的主题,其中的信息可能已经有所发展或是发生改变。

    天天想变量名翻字典都头疼,想要尝试用中文命名变量。

    刚开始就遇到一个问题,英文下面我可以用OrderType表示类名,orderType表示变量。

    换到中文,我没想到有什么好的处理方法,有没有有经验的大佬可以讲讲一些经验。

    12 条回复    2021-02-03 22:16:29 +08:00
    kop1989
        1
    kop1989  
       2021-02-03 17:31:59 +08:00
    扫了眼易语言的语法。
    好像确实不好区分变量 /对象与类名。
    找到的例子:
    猜数字 猜 = 创建 猜数字();
    //猜数字 猜 = 创建 全自动猜数字();
    猜.猜();
    renmu123
        2
    renmu123  
       2021-02-03 18:09:34 +08:00 via Android
    动物类,xx 动物,xx 动物实例
    eason1874
        3
    eason1874  
       2021-02-03 18:27:15 +08:00
    这有啥好头疼的,直译就行了,不用在意英文语法,怕忘记就在注释写清楚用途
    lululau
        4
    lululau  
       2021-02-03 18:55:01 +08:00 via iPhone
    中文一样的,LeiXing leiXing
    lululau
        5
    lululau  
       2021-02-03 18:56:34 +08:00 via iPhone
    难道你说的中文是指汉字。。。切换输入法不累吗,你不累电脑还累呢
    wudicgi
        6
    wudicgi  
       2021-02-03 18:58:30 +08:00
    别想了,不好用,还是翻词典吧
    wudicgi
        7
    wudicgi  
    &nsp;  2021-02-03 19:02:01 +08:00
    英文名称即使用的不是太精确也比中文区分度好,像 type, genre; class, category; property, attribute; number, count 这些中文该用什么对应
    secondwtq
        8
    secondwtq  
       2021-02-03 19:09:53 +08:00   1
    我举两个类似的例子:

    引用 https://v2ex.com/t/612874#r_8089400 这里面的:
    > LLVM 一开始用了以 camelcase 为主的命名方案,具体来说是类型名,变量名(包括局部变量和成员变量),用 UpperCamelCase,函数名是 lowerCamelCase 。
    > 但是后来发现一个问题,比如我有一个变量的类型是 MemorySSAUpdater,那么按照命名规范,我不能把它命名成 MemorySSAUpdater,因为会和类型名冲突,现在的解决方案是取首字母 acronym 命名成 MSSAU 。这种情况在整个仓库里十分广泛: https://github.com/llvm/llvm-project/blob/734c74ba14be0f4421ccd9f720e5b9309248e0f7/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp#L709 感受一下
    > 但是这种命名多了就会十分奇怪,看代码必须先要熟悉这些奇怪的缩写才能看得下去

    > 于是现在有个 proposal 就是把变量命名从 UpperCamelCase 变成 lowerCamelCase,这样我就直接命名成 memorySSAUpdater 就行了: https://llvm.org/docs/Proposals/VariableNames.html

    当时这个事在邮件列表里面吵了半天 ...

    同一帖子上一楼提到,一些函数式编程语言强制要求某些结构使用特定的命名规范,比如在 OCaml 中,constructor 和 module 的名称必须以大写开头,而 Haskell 中类型和 constructor 必须以大写开头。刚开始学的时候感觉有点奇怪不过没太在意,后来也就习惯了。
    但是后来我自己写语言抄 OCaml 的时候就发现问题了,通过这种语言设计上的小动作,编译器实际省下了很多工作正则一匹配就知道这个标识符到底是个值还是个 module,同样是命名空间的访问,value.field 肯定是访问一个 record 中的值,Module.value 肯定是访问模块中的值,Module.Submodule.value.field 肯定是嵌套模块访问 + record 访问。
    而类似的问题在 C++ 中的解决方案是引入两种语法结构: "::" 用于静态命名空间的访问,"." 用于实例命名空间的访问。
    现在我自己要解决这个问题,要么抄 OCaml 的,把命名规范搞得不像个“正常语言”,要么学 C++ 的,多占几个符号,多加几条规则,还有一种方法是我 parser 开洞,不通过任何语法层级的东西来 disambiguate,不过那样 parser 跟 C++ 的就差不多屎了。
    现在我已经放弃在文本层面解决这个问题了 ...
    agagega
        9
    agagega  
       2021-02-03 19:13:34 +08:00 via iPhone
    @secondwtq 对编译器来说 C 语言这样不在词法上区分标志符和类型的做法倒没啥,但对一些基于正则的语法高亮 /格式化工具就挺麻烦了
    secondwtq
        10
    secondwtq  
       2021-02-03 19:14:24 +08:00
    @agagega 很不幸"基于正则的语法高亮"在我这也是要淘汰的 ...
    handle233
        11
    handle233  
       2021-02-03 21:40:56 +08:00
    Visual C++早就支持中文标识符了,你也可以 typedef 一下用中文来表示 int,但是,英文写代码速度会快很多。
    Heartbleed
        12
    Heartbleed  
       2021-02-03 22:16:29 +08:00 via Android
    我觉得用拼音挺正常的,有些业务涉及的变量或字段太多,总不能一个个想对应的英文吧。比如股票交易系统...
    div class="c">
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5485 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 03:35 PVG 11:35 LAX 19:35 JFK 22:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86