编写可读代码 - 变量命名

1,039 阅读2分钟

这是我参与更文挑战的第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 表示包含的范围

image-20210626105356553.png

推荐使用 begin 和 end 表示包含/排除范围

image-20210626105648225.png

给布尔值命名

// 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

总结

本期就到这里啦,主要讲述变量命名的一些规则,好的命名也更容易让后续维护工作更佳方便!