《重构2》第八章-搬移

简介: 《重构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.移出死代码

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

目录
相关文章
|
设计模式 算法 Java
设计模式第十五讲:重构 - 改善既有代码的设计(下)
设计模式第十五讲:重构 - 改善既有代码的设计
293 0
|
5月前
软件复用问题之减少软件系统中的“熵增”,如何解决
软件复用问题之减少软件系统中的“熵增”,如何解决
|
7月前
|
存储 人工智能 编译器
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
112 1
|
7月前
|
存储 安全 程序员
探秘C/C++动态内存分配:从必要性到经典问题剖析
探秘C/C++动态内存分配:从必要性到经典问题剖析
301 0
|
设计模式 Java 测试技术
设计模式第十五讲:重构 - 改善既有代码的设计(上)
设计模式第十五讲:重构 - 改善既有代码的设计
335 0
|
设计模式 测试技术
重构·改善既有代码的设计.02之代码的“坏味道”
之前在《重构·改善既有代码的设计.01》中初步了解了重构的基本前提,基础原则等入门知识。今天我们继续第二更......
209 1
重构·改善既有代码的设计.02之代码的“坏味道”
《重构2》第九章-重组数据
《重构2》第九章-重组数据
106 0
|
存储 算法
嵌入式ARM设计编程(一) 简单数据搬移
嵌入式ARM设计编程(一) 简单数据搬移
80 0
嵌入式ARM设计编程(一) 简单数据搬移
|
存储 关系型数据库 MySQL
第十三章《优化》
第十三章《优化》
第十三章《优化》
|
存储 程序员 C++
C++代码简化之道 (2):消除非必要的指针
作为C++程序员,肯定免不了和指针打交道了。一般我们使用指针都是为了避免不必要的拷贝,但有时候其实可以简化掉它。
139 0