|
@@ -2277,21 +2277,24 @@ public void setNumber(String number) {
|
|
|
<p>在《重构》一书中首先提到的Code Smell就是重复代码(Duplicate Code)。重复代码看上去并不会影响我们的阅读体验,但是实际上会发生这样的事——重复的代码阅读体验越不好。</p>
|
|
|
<p>DRY(Don’t Repeat Yourself)原则是特别值得玩味的。当我们不断地偏执的去减少重复代码的时候,会导致复杂度越来越高。在适当的时候,由于业务发生变更,我们还需要去拆解这些不重复的代码。</p>
|
|
|
<h2 id="代码重构">代码重构</h2>
|
|
|
-<p>什么是重构?</p>
|
|
|
<blockquote>
|
|
|
<p>重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。</p>
|
|
|
</blockquote>
|
|
|
-<p>相似的</p>
|
|
|
-<blockquote>
|
|
|
-<p>代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。</p>
|
|
|
-</blockquote>
|
|
|
-<p>在经历了一年多的工作之后,我平时的主要工作就是修Bug。刚开始的时候觉得无聊,后来才发现修Bug需要更好的技术。有时候你可能要面对着一坨一坨的代码,有时候你可能要花几天的时间去阅读代码。而,你重写那几十代码可能只会花上你不到一天的时间。但是如果你没办法理解当时为什么这么做,你的修改只会带来更多的bug。修Bug,更多的是维护代码。还是前人总结的那句话对:</p>
|
|
|
+<p>代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 在经历了一年多的工作之后,我平时的主要工作就是修Bug。刚开始的时候觉得无聊,后来才发现修Bug需要更好的技术。有时候你可能要面对着一坨一坨的代码,有时候你可能要花几天的时间去阅读代码。而,你重写那几十代码可能只会花上你不到一天的时间。但是如果你没办法理解当时为什么这么做,你的修改只会带来更多的bug。修Bug,更多的是维护代码。还是前人总结的那句话对:</p>
|
|
|
<blockquote>
|
|
|
<p>写代码容易,读代码难。</p>
|
|
|
</blockquote>
|
|
|
<p>假设我们写这些代码只要半天,而别人读起来要一天。为什么不试着用一天的时候去写这些代码,让别人花半天或者更少的时间来理解。</p>
|
|
|
<h3 id="重命名">重命名</h3>
|
|
|
-<p>在上一节中,我们提到了命名的重要性,这里首先要说到的也就是重命名。</p>
|
|
|
+<p>在上一节中,我们提到了命名的重要性,这里首先要说到的也就是重命名<sub>~</sub>。让再看看《编写可读代码的艺术》也提到了这几点:</p>
|
|
|
+<ol type="1">
|
|
|
+<li>选择专业的词。最好是可以和业务相关的,它应该极具表现力。</li>
|
|
|
+<li>避免像tmp和retval这样泛泛的名字。不得不提到的一点是,tmp实在是一个有够烂的名字,将其变为timeTemp或者类似的会更直观。它只应该是名字中的一部分。</li>
|
|
|
+<li>用具体的名字代替抽象的名字。</li>
|
|
|
+<li>为名字赋予更多的信息。</li>
|
|
|
+<li>名字应该有多长。</li>
|
|
|
+<li>利用名字的格式来传递含义。</li>
|
|
|
+</ol>
|
|
|
<h3 id="提取变量">提取变量</h3>
|
|
|
<p>先让我们来看看一个简单的情况:</p>
|
|
|
<div class="sourceCode"><pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="cf">if</span> (<span class="va">$scope</span>.<span class="va">goodSkills</span>.<span class="at">indexOf</span>(<span class="st">'analytics'</span>) <span class="op">!==</span> <span class="op">-</span><span class="dv">1</span>) <span class="op">{</span>
|
|
@@ -2304,7 +2307,14 @@ public void setNumber(String number) {
|
|
|
<span class="va">skills</span>.<span class="at">analytics</span> <span class="op">=</span> LEVEL_FIVE<span class="op">;</span>
|
|
|
<span class="op">}</span></code></pre></div>
|
|
|
<h3 id="提炼函数">提炼函数</h3>
|
|
|
-<p>上面介绍的都是一些简单、基础、实用的重构技巧,更多精彩内容还是需要大家去好好掌握的。</p>
|
|
|
+<p>这个简单有效的方法就是为了对付之前太长的函数,抽取提炼函数出应该抽取出来的部分成为一个新的函数。引自《重构》一书的说法,短的精巧的函数有以下的特点:</p>
|
|
|
+<ol type="1">
|
|
|
+<li>如果每个函数的粒度都很小,那么函数被复用的机会就更大;</li>
|
|
|
+<li>是这会让高层函数读起来就像一系列注释一样,容易理解;</li>
|
|
|
+<li>是如果函数都是细粒度,那么函数的复写也会更加容易。</li>
|
|
|
+</ol>
|
|
|
+<p>在提炼函数中我们所要做的就是——判断出原有的函数的意图,再依据我们的新意图来命名新的函数。然后判断依赖——变量值,处理这些变量。提取出函数,最近对其测试。</p>
|
|
|
+<p>这里只简单地对重构进行一些介绍,更多详细信息请参阅《重构:改善既有代码的设计》。</p>
|
|
|
<h2 id="intellij-idea重构">Intellij Idea重构</h2>
|
|
|
<p>下面简单地介绍一下,一些可以直接使用IDE就能完成的重构。这种重构可以用在日常的工作中,只需要使用IDE上的快捷键就可以完成了。</p>
|
|
|
<h3 id="提炼函数-1">提炼函数</h3>
|