《重构2》第八章-搬移

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.移出死代码

死代码从运行上来讲,不会影响代码运行速率,但是在代码理解中,就会产生很多不必要的工作量!之前没有版本管理,大家可能觉得,某一段代码以后可能还会用到,所以不能删除,只是将其注释,但是,现在的版本管理代码工具,几乎都拥有版本溯源功能.
在此基础上,我们可以将死代码专门拉一个分支做一个版本,进行分操作记录.以后需要找回这份代码,拉出版本重新拷贝即可.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乾复道

与君共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值