刚收到的私信问题:
java英文标识符中,是用大小写来区分是类型还是变量的,但使用了中文,就没法这么做了,有什么好的建议么?比如我定义一个状态枚举,再用这个类型定义一个变量,也是叫状态。英文中,类型是State,变量是state。中文下就不行了。
问题感觉比较有代表性,此文作一阶段小结。并不针对枚举类型,而是所有类型/接口。各人命名风格不同,此文仅对本人习惯作一介绍(主要以 Java 代码为例)。
最早开始与同好切磋这个问题是在两年多前的这帖:中文命名的特定问题, 相关风格及规范 · Issue #45 · program-in-chinese/overview
重名是否恰当
应该是首先考虑的问题。英文经常仅用大小写区分,并不意味着应该/必须照搬直译。以薛定谔的猫为例:
public class Cat {
enum State {
Dead,
Alive
}
State state;
}
假定这里枚举类型 State 的含义是打开箱子观测时的状态,可以用“下场”,“结局”等等更能体现语义的词汇命名枚举类型。
这取决于代码的语义,以及设计。感觉比较难一概而论(如有具体实例欢迎在上面的 issue 跟帖/下面留言/私信继续探讨),但最好在采用其他手段区分之前,先认真考虑一下。因为这往往可以使语义更加明确,开发者也在推敲过程中能对代码目的有个更清晰的概念。
写到这里时,看了一下两年前的 中英文代码对比系列之Java一例,突感当时的思维僵化,请见最后增补。这与本文主题并不直接相关,但直译之弊可见一斑。
下面是如果避无可避,或者不愿在推敲上花过多功夫的一些权宜之计:
方法一
使用后缀突出属性。比如 class 后缀“类”,interface 后缀“接口”,enum 后缀“种类”(这个没有实践过)等等。比如这些小项目:
一个好处是,几乎可以杜绝和变量重名的情况出现。但贯彻风格也是个额外负担。
方法二
有时,项目写到一半才发现这个问题,而大多数类名已经写好,不带后缀。又懒得重命名所有类,那么就在这个重命名的地方对变量加前缀,比如这里的“某词条”:
词条 某词条 = 英汉词典.查词(词条[0]);
这对偶尔出现的情况比较适用。
【先想到这么多】