最近在学习 郑晔 在极客时间上的一个专栏《代码之丑》,并根据自身情况整理了一份笔记
02 | 乱用英语:站在中国人的视角来看英文命名
现在主流的程序设计语言都是以英语为基础的,且不说欧美人设计的各种语言,就连日本人设计的 Ruby、巴西人设计的
Lua,各种语法采用的也全都是英语。所以,想要成为一个优秀的程序员,会用英语写代码是必要的。这里并不是说,程序员的英语一定要多好,但最低限度的要求是写出来的代码要像是在用英语表达。
1.违反语法规则的命名
一般来说,常见的命名规则是:类名是一个名词,表示一个对象,而方法名则是一个动词,或者是动宾短语,表示一个动作
。
例如:
public void completedTranslate(final List<ChapterId> chapterIds) {}
这段代码要做的是将一些章节的信息标记为翻译完成,似乎函数名也能反映这个意思,但仔细一看你就会发现问题。作者想表达的是“完成翻译”,因为是已经翻译完了,所以,他用了完成时的 completed,而翻译是 translate。这个函数名就成了completedTranslate。由此,你可以看到,作者已经很用心了,但遗憾的是,这个名字还是起错了。
completedTranslate 并不是一个有效的动宾结构。如果把这个名字改成动宾结构,只要把“完成”译为 complete,“翻译”用成它的名词形式 translation 就可以了。所以,这个函数名可以改成 completeTranslation
又例如:一个函数名是 retranslation,其表达的意图是重新翻译,但作为函数名,它应该是一个动词,所以,正确的命名应该是 retranslate
。
2.不准确的英语词汇
在这种情况下,最好的解决方案还是建立起一个业务词汇表,千万不要臆想。
建立词汇表的另一个关键点就是,用集体智慧,而非个体智慧。
3.英语单词拼写错误
例如:
public class QuerySort {
private final SortBy sortBy;
private final SortFiled sortFiled;
...
}
sortFiled 是啥?排序文件吗?为啥用的还是过去式?归档?
原来是同时拼错了,应该是排序的字段,是 field
4.使用拼音进行命名;
5. 使用不恰当的单词简写(比如,多个单词的首字母,或者写单词其中的一部分)。
我们还讨论了如何从实践层面上更好地规避这些坏味道:制定代码规范,比如
1、类名要用名词,函数名要用动词或动宾短语;
2、要建立团队的词汇表;
3、要经常进行代码评审。