1.搬移函数/搬移字段
搬移函数:在代码执行中,已封装的函数,频繁调用上下文的元素,而对自身的类的函数很少关联,可以考虑搬移函数到相关的类中,减少模块依赖;
当然一个函数变得越加通用及频繁使用的时候,就可以将其搬移至更合适的类中.
搬移字段:将字段搬移至其它地方,便于代码理解和数据结构纯净.
2.搬移语句到函数/搬移语句到调用者
搬移语句到函数:其实是代码的黄金守则之一,"消除重复".
当有相同带代码逻辑是在韩式调用前后总要知执行的,就可以搬移相关语句到函数中.
搬移语句到调用者,当我们发现一个函数使用时,有了使条件的差异性,我们有两个选择
1.搬移有差异的语句到调用者位置
2.创建一个新的函数,将其中有差异性语句拆除即可(这会造成相关函数的重复常见,命名不规范时,会让后续的协作者很头疼)
3.以函数调用取代内联代码
与用函数调用代替扁平化逻辑,理解一致
4.移动语句
将相关的逻辑的代码移动到相同的位置,便于代码理解!
但是,切记,移动语句钱,确认上下逻辑关系,移动语句使用有造成副作用,避免代码错误
同时移动语句之后,可以使用提炼函数,简化代码
5.拆分循环
很简单的理解,尽量拆分循环中的操作,让一个循环只做一件事(数据计算),或者少数的事情,这样会便于后期修改和理解,因为,你知道每一个循环是为了做什么,而不是一大堆计算换入同一个循环中,你该懂的知识其中一个计算,却要理解所有计算,你的操作会不会影响到其他操作!
重构提醒:不要担心拆分循环会造成效率低下,我们有更多的方法可以提升效率
6.以管道代替循环
在操作系统和代码进步的时代,各种管道符可以让代码的可读性更强.
示例:
在函数中筛选出所有的印度的办公室,并返回办公室所在城市信息和联系电话
原代码
function acquireData(input) {
const lines = input.splice("\n");
let firstLine = true;
const result = [];
for (const line of lines) {
if (firstLine) {
firstLine = false;
continue;
}
if (line.trim() === "") continue;
const record = line.splice(",");
if (record[1].trim() === "India") {
result.push({city: record[0].trim(), phone: record[2].trim()})
}
}
return result;
}
管道符优化后
function acquireData(input) {
const lines = input.splice("\n");
return lines.slice(1)
.filter(line => line.trim() !== "")
.map(line => line.splice(","))
.filter(fields => fields[1].trim() === "India")
.map(fields => ({city: fields[0].trim(), phone: fields[2].trim()}));
}
7.移出死代码
死代码从运行上来讲,不会影响代码运行速率,但是在代码理解中,就会产生很多不必要的工作量!之前没有版本管理,大家可能觉得,某一段代码以后可能还会用到,所以不能删除,只是将其注释,但是,现在的版本管理代码工具,几乎都拥有版本溯源功能.
在此基础上,我们可以将死代码专门拉一个分支做一个版本,进行分操作记录.以后需要找回这份代码,拉出版本重新拷贝即可.