今天我们不聊性能优化,只是从后期维护代码的角度谈谈如何优雅的书写代码
· 为什么需要些可维护性高的代码 ?
在开发的过程中,迭代和维护是再正常不过的操作了,那么就必然要阅读别人的代码
你有没有遇到过一些尴尬的事情:
1、看不懂别人的代码,不知从何下手
2、修改一个功能,得读两天代码,改完发现 bug 最少的时候是修改以前
3、只是修改了一行代码,发现控制台报错好几十个...
如果代码的可维护性高了,那么可以避免很多这些问题
编写可维护性高的代码, 从我做起 ^_^
· 什么是可维护性高的代码 ?
容易理解: 不需要求助源代码书写人员,就能看得懂
符合常识: 代码书写的自然通透
容易适配: 当数据发生变化的时候,不至于完全重写
容易扩展: 对于核心功能有可扩展性(适当利用策略模式)
容易调试: 当出现问题的时候,能给出明确且详细的错误提示,可以直接定位问题源
从下面几点做起:
一、代码可读性
· 想要好维护, 那么第一任务就是你写的代码要让别人看得懂
· 因为我们的代码,当他不运行的时候,就是一个纯文本
· 想要让别人看得懂你写的一堆文本,那么就要从一切自定义的内容开始做起
二、代码缩进
· 能区分是论文还是代码的第一因素,也是最直观的因素就是代码缩进
· 代码没有缩进,或者随机缩进,那么和给你看一篇火星文论文没有区别
for (var i = 0; i < 100; i++) {
if (true) {
function fn() {
for (var j = 0; j < 100; j++) {
}
}
for (var j = 0; j < 100; j++) {
}
}
}
· 我们严格保持了代码缩进以后, 虽然代码意义不一定看得懂, 但是代码结构我能看得懂了
for (var i = 0; i < 100; i++) {
if (true) {
function fn() {
for (var j = 0; j < 100; j++) {
}
}
for (var j = 0; j < 100; j++) {
}
}
}
· 这个时候就可以尝试下改一改了
三、注释
在任何一个语言里面,都是有注释的
语言规范里定义注释,不是为了让你学了玩的,就是为了让你对代码进行一些标注的
大型代码块,和大量变量堆积的地方,都要有清楚的注释,用来表明这个代码块或者说这一堆变量是干什么用的,尤其是函数,尽量做到每一个函数的前面都有一个说明注释。
/*
* fn 获取范围之间随机整数的函数
* @param {Number} a 范围开始的数字
* @param {Number} b 范围结束的数字
* @return {Number} 范围内的随机整数
*/
function fn(a, b) { ... }
o 每一个函数都应该有参数说明,是否有返回值,返回值是什么
o 因为这些内容在函数定义中是不能直观看到了,需要阅读代码才可以
o 当你写明了这些以后,阅读性就大大提高了
o 假设,你的函数块里面涉及到很复杂的算法,最好也是在说明注释里面标注出来
当你对于一些浏览器问题做出的修复,你使用了一些黑科技
o 那么你一定要把这些黑科技标注出来,避免别人修改你的代码的时候
o 觉得这些黑科技没有用,给你删掉了,导致你修改好的问题又重新出现了
四、变量和函数命名
变量的命名和函数的命名,是最能体现我们自定义的地方
对于每一个变量和函数的命名,我们都尽量准确的给到一个语义,不管你是使用 大驼峰 还是 小驼峰,都要保证看到名字就能知道这个变量或者函数的意义
从变量来说
1、尽量使用名词,而不是动词
比如:car / person / show / ...
2、常量来说,要使用大写字母来表示
比如:TEST / BROWSER / ...
3、区分全局和私有变量,函数内的私有变量我会以 _ 开头
比如: _this / ...
从函数来说
1、当函数返回布尔值的时候, 一般会以 is 开头
比如:isEnabled() / isSelected() / ...
2、获取类的函数一般以 get 开头
比如:getUserList() / getUserInfo() / ...
3、设置类的一般使用 set 开头
比如:setName() / setUserInfo() / ...
4、修改类的一般使用 update 开头
比如:updateName() / updatePrice() / ...
4、程序处理类函数使用 handler 结尾
比如:showEditHandler() / submitHandler() / ...
5、尽可能的通过名字描述清楚函数的作用,不用担心太长,因为后期打包工具会帮我们处理掉的
比如: getUserInfoById() / delGoodsParamsById() / ...