1. 养成良好的命名习惯
变量、函数、参数、类和包的命名都可以参考一下规则。
-
名副其实
从变量、函数或类的名称中,应该可以读出来它为什么存在,做什么事情,应该怎么使用。如果需要补充注释,那就不算名副其实。
-
避免误导
避免留下掩藏代码本意的错误线索。例如使用小写字母 “l” 和大写字母 “O“ 做为变量名。
-
有意义的区分
通常可能会存在一些相似的变量、函数或类,需要在命名上能帮助阅读者更好的理解或调用。举几个例子:
// 原函数
func CopyBytes(a1, a2 []byte) {
}
// 重新命名的函数
func CopyBytes(source, destination []byte){
}
type ProductInfo struct{
}
type ProductData struct{
}
// 这两个有什么区别呢?从命名上根本看不出来要用哪个,只能深入看代码细节
废话都是冗余,variable 不应该出现在变量命名中,table 也不应该出现在数据库的表命名中。
-
使用能读出来的名称
使用大家都能熟悉的单词做来命名。举个的例子:
// 生成时间(年、月、日、时、分、秒)
func genymdhms() time {
}
func generateTime() time {
}
-
使用可搜索的命名
若函数和常量可能在代码中多处使用,应赋予其便于搜索的名称。通常来说,单字母变量仅用于短方法的本地变量,变量的名称长短与其作用域相对应。
-
避免使用编码
通常不太会出现,但接口命名中可能会出现。例如,接口命名都以 “I” 开头,但这种做法并不好,前导字母 “I” 被滥用造成了干扰。而且使用时,别人也不需要感知这是一个接口。所以实现类加上 “Impl” 反而会好一些,因为使用时,只需要关心抽象的接口而不是实现细节。
-
避免思维映射
不要让阅读代码的人将你的命名理解成他们熟知的名称。例如使用 i, j, k 变量,大多数人都容易理解成这些变量表示循环计数。
-
类名
类名和对象名应该是名词或名词短语。类名不应该是动词。
-
方法名
方法名应当是动词或动词短语。
-
每个概念对应一个词
例如使用 get, fetch 和 retrieve 来给一个类的多个方法命名,那在调用时应该用哪个呢?
-
添加有意义的语境
-
不要添加没用的语境