,我们先引入一句话:
,代码和语言文字一样是为了表达思想、记载信息,所以写得清楚能更有效地表达。本文多数总结自《重构:改善既有代码的设计(第2版)》我们直接进入正题,上代码!
,将一段代码提炼到一个独立的函数中,并以这段代码的作用命名。
,如果需要花时间浏览一段代码才能弄清楚它到底要干什么,那么这时候就应该将其提炼到一个函数中,并根据它所做的事命名。以后再读这段代码时,一眼就能知道这个函数的用途。
,以参数的形式传入不同的值,消除重复函数
,如果发现两个函数逻辑非常相似, 只有一些字面量值不同, 可以将其合并成一个函数, 以参数的形式传入不同的值, 从而消除重复。
,使用策略模式替换“胖胖”的if-else或者switch-case
,当if-else或者switch-case分支过多时可以使用策略模式将各个分支独立出来
,提炼局部变量替换表达式。
,一个表达式有可能非常复杂且难以阅读。这种情况下, 可以提炼出一个局部变量帮助我们将表达式分解为比较容易管理的形式 ,这样的变量在调试时也很方便。
,用变量右侧表达式消除变量,这是提炼变量的逆操作。
,当变量名字并不比表达式本身更具表现力时可以采取该方法。
,将变量封装起来,只允许通过函数访问
,对于所有可变的数据, 只要它的作用域超出单个函数,就可以采用封装变量的方法。数据被使用得越广, 就越是值得花精力给它一个体面的封装。
,把一大段行为拆分成多个顺序执行的阶段
,当看见一段代码在同时处理两件不同的事, 可以把它拆分成各自独立的模块, 因为这样到了需要修改的时候, 就可以单独处理每个模块。
,将一个循环拆分成多个循环
,当遇到一个身兼数职的循环时可以将循环拆解,让一个循环只做一件事情, 那就能确保每次修改时你只需要理解要修改的那块代码的行为就可以了。该行为可能会被质疑,因为它会迫使你执行两次甚至多次循环,实际情况是,即使处理的列表数据更多一些,循环本身也很少成为性能瓶颈,更何况拆分出循环来通常还使一些更强大的优化手段变得可能。
,将一个变量拆分成两个或多个变量
,如果变量承担多个责任, 它就应该被替换为多个变量, 每个变量只承担一个责任。
,将条件表达式提炼成函数
,在带有复杂条件逻辑的函数中,往往可以将原函数中对应的代码改为调用新函数。
,对于条件逻辑, 将每个分支条件分解成新函数可以带来的好处:
,将多个条件表达式合并
,当发现这样一串条件检查:检查条件各不相同, 最终行为却一致。如果发现这种情况,就应该使用“逻辑或”和“逻辑与”将它们合并为一个条件表达式。
,如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。这样的单独检查常常被称为“卫语句”(guard clauses)。
,如果使用if-else结构,你对if分支和else分支的重视是同等的。这样的代码结构传递给阅读者的消息就是:各个分支有同样的重要性。卫语句就不同了,它告诉阅读者:“这种情况不是本函数的核心逻辑所关心的, 如果它真发生了,请做一些必要的整理工作,然后退出。” 为了传递这种信息可以使用卫语句替换嵌套结构。
,将查询动作从修改动作中分离出来的方式
,如果遇到一个“既有返回值又有副作用”的函数,此时可以将查询动作从修改动作中分离出来。
© 版权声明
文章版权归作者所有,未经允许请勿转载。