写后台系统
大量增删改查的表单的时候,记得封装组件的时候与数据解耦,我看很多同事写页面的时候,喜欢把数据和视图结合,我一般会封装视图,对传入的 columns 也设计了一套 json 语言传入,尽量减少重复代码。
另外,在后端没给出字段的时候,可以通过只写一个 title 来寻找到之前设计的且改一出地方就会更改所有地方。
提炼函数
如果在函数中有一段代码可以被独立出来,那我们最好把这些代码放进另外一个独立的函数
中。这是一种很常见的优化工作,这样做的好处主要有以下几点。
- 避免出现超大函数。
- 独立出来的函数有助于代码复用。
- 独立出来的函数更容易被覆写。
- 独立出来的函数如果拥有一个良好的命名,它本身就起到了注释的作用
合并重复的条件片段
如果一个函数体内有一些条件分支语句,而这些条件分支语句内部散布了一些重复的代码,
那么就有必要进行合并去重工作。
把条件分支语句提炼成函数
在程序设计中,复杂的条件分支语句是导致程序难以阅读和理解的重要原因,而且容易导致一个庞大的函数。
var isSummer = function () {
var date = new Date();
return date.getMonth() >= 6 && date.getMonth() <= 9;
};
var getPrice = function (price) {
// if ( date.getMonth() >= 6 && date.getMonth() <= 9 ){
if (isSummer()) {
// 夏天
return price * 0.8;
}
return price;
};提前让函数退出代替嵌套条件分支
许多程序员都有这样一种观念:“每个函数只能有一个入口和一个出口。”现代编程语言都会限制函数只有一个入口。但关于“函数只有一个出口”,往往会有一些不同的看法。
下面这段伪代码是遵守“函数只有一个出口的”的典型代码:
var del = function (obj) {
var ret;
if (!obj.isReadOnly) {
// 不为只读的才能被删除
if (obj.isFolder) {
// 如果是文件夹
ret = deleteFolder(obj);
} else if (obj.isFile) {
// 如果是文件
ret = deleteFile(obj);
}
}
return ret;
};重构后:
var del = function (obj) {
if (obj.isReadOnly) {
// 反转 if 表达式
return;
}
if (obj.isFolder) {
return deleteFolder(obj);
}
if (obj.isFile) {
return deleteFile(obj);
}
};传递对象参数代替过长的参数列表
尽量减少参数数量
少用三目运算符
合理使用链式调用
使用链式调用的方式并不会造成太多阅读上的困难,也确实能省下一些字符和中间变量,但节省下来的字符数量同样是微不足道的。链式调用带来的坏处就是在调试的时候非常不方便,如果我们知道一条链中有错误出现,必须得先把这条链拆开才能加上一些调试 log 或者增加断点,这样才能定位错误出现的地方。
用 return 退出多重循环
假设在函数体内有一个两重循环语句,我们需要在内层循环中判断,当达到某个临界条件时退出外层的循环。