编程基本功 – 重构

refactoring

代码重构,是技术大牛必备之基础技能 …

只要你写过代码,你就会重构,而且肯定会,只是你们之间不太熟。如果你对代码有点点“洁癖”,那你们应该很熟。之所以取这个标题,无非是想吸引更多关注 … ,如果觉得文章有用,请推荐给朋友(微信公众号:PHP工程师),这样我也更有动力。

代码重构(Code refactoring)指:对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。

对应到大家的编程经验,重构的定义应该是这样的。前几天老板天天催我这个功能,我赶啊赶,代码能拷贝的就拷贝点,难看就难看点,拼拼凑凑,总算完成了功能,不容易啊,还好老板比较满意,终于可以松口气了。聪明的你会想到,妹的,这么一坨拼拼凑凑的代码,我以后还要维护的呀,等到要维护的时候我可能都忘了这是怎么拼出来的了,那么,趁现在有空,或者下班没事,我就先优化这坨代码:删了一些无效代码、封装了些代码拿来重用、公开少量接口隐藏实现细节,等等。收获了成就感,编程的信心更足了。

所以,大家都实践过了,可以顺便了解下前辈总结出的理论知识。见下面。
重构既不修正错误,又不增加新的功能性。反而它是用于提高代码的可读性或者改变代码内部结构与设计,并且移除死代码,使其在将来更容易被维护。重构代码可以是结构层面或是语意层面,不同的重构手段施行时,可能是结构的调整或是语意的转换,但前提是不影响在转换前后代码的行为。特别是,在现有的程序的结构下,给一个程序增加一个新的行为可能会非常困难,因此开发人员可能先重构这部分代码,使加入新的行为变得容易。

为什么重构不去改动代码原有功能?关键就是,这样更容易改。否则既改动了代码结构,又改动了代码功能,同时在做两件事甚至更多,那就做不好。第二点,如果在重构之后的干净代码上修改功能,也会容易的多的多。

重构这个术语可从数学与多项式的因式分解类比而来。如,x^2 – 1 可以被分解为 (x + 1) * (x − 1),因式分解后的表达力更清晰,比如,这里揭示了前面的形式不可见的内部结构(两个根 +1 和 −1)。同样,在软件重构中,我们可以将复杂的代码分解为一些更简单的部分,或者防止一些简单的部分变得越来越复杂,这也就是为什么我们说重构是个好东西。

实际上,重构意味着让代码越来越干净、越来越简单和优雅。
至于具体如何重构,网上、书本都有充足资料,因为这项技能已经被实践和总结的比较成熟了。这里不列举。

或许有人问,如果写出来的代码,不用自己维护,是不是就不用重构了?那请问,不认真对待自己文字的作家是好作家么?这是职业道德问题。还有一句,出来混迟早要还的。

再有人问,公司里做功能的时间都不够,还有时间重构么?做功能的同时,有些小的重构是无意间完成的;大一点的重构,确实是要另外拿出时间来,但这是你的锻炼机会,锻炼重构技能的机会,成为“技术大牛”的机会,你的技能是长在你身上的,都是你自己的。如果重构技能都没练好,还谈何职业生涯!

最后问一下各位:今天你重构了么?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">