这是我参与更文挑战的第8天,活动详情查看:更文挑战
编写可读代码 - 变量命名
把信息封装到名字里
相对来说给变量命名是最简单也是最复杂的事情,好的命名其实也是注释,尽管长度不长,但承载的信息却很多,很有利于后期维护。
通常命名遵循以下 5 个原则
-
选择专业的词
// bad - get代表的是获得,没有说明来源,可能是缓存也可能是数据库 function getPage(url) {...} // god - download语义更明确表明下载 function downloadPage(url) {...} -
避免泛泛的词(能表达一定含义的词)
// 避免使用像tmp、retval、foo、bar这样的名字 function dealData(url) { let retval = null ... return retval } // 上述例子中 retval 只能表明‘我是一个返回值’得含义,并不能给读者带来更多的信息 // 当然有些时候泛泛得名词也能有很好的效果, 例如下例这种经典场景 if (right < left) { let tmp = right right = left left = tmp } -
前缀和后缀能给变量带来更多得含义
// 如果变量是一个度量得话,那么最好带上单位 // bad let start = new Date().getTime() // 1970/01/01 至今有多少过去了多少毫秒 // good let start_ms = new Date().getTime()函数参数 带单位的参数 start(delay) delay -> delay_s createCatch(size) size -> size_mb -
名字得长度也很有影响
一般遵循以下两个原则
- 在小的作用域可以用短的名字
- 在作用域大的地方尽量使用语义明确的词
-
名字得格式来表达含义
// 常用的例如 用$表示jq对象 var $all_img = $('img') // 表示一个jq对象,可以用jq方法
使用有规范性的词
推荐使用min 和 max 表示极限值
var max_download_count = 20
if (current_download_count > max_download_count) return error
推荐使用first 和 last 表示包含的范围
推荐使用 begin 和 end 表示包含/排除范围
给布尔值命名
// bad - 这种给人的感觉也是模糊不清
var red_password = true
// 更好的命名
var need_password = true
var user_is_auths = true
// 通常来说,加上 is、has、can、should这样的词可以使布尔值表达的含义更加明确,
// 另外也不能使用反义词命名
// bad
var disable_login = true
// good
var can_login = false
总结
本期就到这里啦,主要讲述变量命名的一些规则,好的命名也更容易让后续维护工作更佳方便!