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

2021-02-03 17:15:46 +08:00
 Vinty

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

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

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

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

引用 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
2021-02-03 19:13:34 +08:00
@secondwtq 对编译器来说 C 语言这样不在词法上区分标志符和类型的做法倒没啥,但对一些基于正则的语法高亮 /格式化工具就挺麻烦了
secondwtq
2021-02-03 19:14:24 +08:00
@agagega 很不幸"基于正则的语法高亮"在我这也是要淘汰的 ...
handle233
2021-02-03 21:40:56 +08:00
Visual C++早就支持中文标识符了,你也可以 typedef 一下用中文来表示 int,但是,英文写代码速度会快很多。
Heartbleed
2021-02-03 22:16:29 +08:00
我觉得用拼音挺正常的,有些业务涉及的变量或字段太多,总不能一个个想对应的英文吧。比如股票交易系统...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/751000

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX