代码重构之函数的重构

作者: 过期的薯条 | 来源:发表于2017-06-04 21:04 被阅读116次

1.引言

最近刚换公司,在公司接手了一个项目,主管叫我重构。我打开代码一看,尼玛这是代码吗。包名,变量名全部是用大写拼音开头,网络请求还是用的httpclient。一个类,一个函数代码能搞几百行。自己的代码写的也是不行,借着这个机会买了一本书《重构改善既有代码的设计》然后看了下。于是做一下笔记。
那本书看了下,的确很有用,但是有些重构手法感觉不重要,在这个博客中就不做记载。主要把平时用到的记录下。

2.正题

不管是android stuido 还是idea,都提供了重构的工具。工具栏"Refactor"就是所有重构的手法。下面我就说几个自我感觉常用的。


2.1 Extract Method(提炼函数:注意方法内的变量)

一个函数中的代码行数太多,明显就是不符合规范的代码按照《重构改善既有代码的设计》作者的思想。尽量将大函数化分成几个小方法。我个人觉得这个观点有点问题。假如方法太过多,而且太分散,不利于代码的阅读。大函数肯定要分。不过分多少个函数,这个需要自己把握。
假如提炼的函数,需要用到另外的变量,可以将变量作为方法的参数。


2.2 Inline (内联)

内联作用于函数内部,减少不必要的代码。

demo.gif

2.3 三目表达式

减少不必要的代码,使方法更加紧促,简洁。

demo1.gif

2.4 replace temp with query(以查询取代临时变量)

这个手法主要是对临时变量,进行重构。重构的场景是 "变量" =“表达式”。这时候就可以将表达式通过 replace temp with query 抽出来。好处个人觉得是:其他方法用到这个“表达式”的时候可以直接调用。

demo3.gif

2.5remove assignments to parameters(移除对参数的赋值)

java按值传递方式。假如将一个引用作为参数,更改引用的内容。极有可能出错。remove assignments to parameters 就是建立一个变量接受引用对象的值,这样操作都是操作变量,对引用对象的值 没得影响。

2.6substitute algorithm(替换算法)

android里面有一个情节很常见。有三个imageview,有三个图片路径。我之前写的代码是这样。

demo4.png

这种写法虽然可以实现,但是不是最简单的。改良之后的算法

demo5.png

代码与之前相比行数大大减少了一倍。

综合例子:
这是以前学习java的时候经常写的代码:

demo6.png

学习了代码重构之后的写法:

demo7.gif

今天就写到这,后续还有移动对象的重构手法。今天这个是第一部分。

相关文章

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 代码重构之函数的重构

    1.引言 最近刚换公司,在公司接手了一个项目,主管叫我重构。我打开代码一看,尼玛这是代码吗。包名,变量名全部是用大...

  • 代码重构-函数

    写在文前:大部分程序员都能写出计算机可以理解的代码,唯有优秀的程序员才能写出让人容易理解的代码 从某种程度上来说,...

  • 2019-02-17 《重构—改善既有代码的设计》手法汇总

    重构手法 代码的坏味道 以下内容来自《重构—改善既有代码的设计》 一、重新组织函数 1、Extract Metho...

  • 《重构》一书总结(二)

    《重构》一书总结(二) 重构的重点,在于对那些代码进行重构,如果重构不当,反而适得其反。 重构代码终结如下 1.D...

  • 重构代码之美

    什么是重构; 为什么要重构; 什么时候重构; 怎样避免重构的现象; 重构的难点在哪里; 如何来实施代码重构; 重构...

  • 重构技巧-提炼函数

    这是《重构-改善既有代码的设计》这本书的原文 动机 提炼函数是我最常用的重构之一。(在这儿我用了“函数/func...

  • 重构技巧-提炼函数

    这是《重构-改善既有代码的设计》这本书的原文 动机 提炼函数是我最常用的重构之一。(在这儿我用了“函数/f...

  • 30 - 重构之代码解耦

    重构可以分为大规模高层重构(简称“大型重构”)和小规模低层次重构(简称“小型重构”)。大型重构是对系统、模块、代码...

  • [第三篇]重构-重新组织数据

    事先说明,文章首发于自己个人站点,戳「重构-重新组织数据」之解。 继续「重构-改善既有代码设计」之旅,重构前两章的...

网友评论

    本文标题:代码重构之函数的重构

    本文链接:https://www.haomeiwen.com/subject/ckqbfxtx.html