Browse Source

handle for magic number

Fengda HUANG 9 years ago
parent
commit
1858207b6f
3 changed files with 84 additions and 4 deletions
  1. 24 0
      chapters/3.2.2-refactor.md
  2. 36 2
      growth.md
  3. 24 2
      index.html

+ 24 - 0
chapters/3.2.2-refactor.md

@@ -17,12 +17,36 @@
 
 ###重命名
 
+在上一节中,我们提到了命名的重要性,这里首先要说到的也就是重命名。
+
 ###提取变量
 
+先让我们来看看一个简单的情况:
+
+```javascript
+if ($scope.goodSkills.indexOf('analytics') !== -1) {
+  skills.analytics = 5;
+}
+```
+
+在上面的代码里比较难以看懂的就是数字5,这时候你会怎么做?写一行注释?这里的5就是一个Magic Number。
+
+而实际上,最简单有效的办法就是把5提取成一个变量:
+
+
+```javascript
+var LEVEL_FIVE = 5;
+if ($scope.goodSkills.indexOf('analytics') !== -1) {
+  skills.analytics = LEVEL_FIVE;
+}
+```
+
 ###提炼函数
 
 ###内联函数
 
+###使用注释
+
 ###高级重构
 
 上面介绍的都是一些简单、基础、实用的重构技巧,更多精彩内容还是需要大家去好好掌握的。

+ 36 - 2
growth.md

@@ -2782,9 +2782,19 @@ if (EchoesWorks.isObject(words)) {
 
 ###命名
 
-命名是一个特别长的,也是特别忧伤的故事。我想作为一个程序员的你,也相当恐惧这件事。
+命名是一个特别长的,也是特别忧伤的故事。我想作为一个程序员的你,也相当恐惧这件事。一个好的函数名、变量名应该包含着这个函数的信息,如这个函数是干什么的,或者这个函数是怎么来的,这个变量名存储的是什么。
 
-一个好的函数名、变量名应该包含着这个函数的信息,如这个函数是干什么的,或者这个函数是怎么来的,这个变量名存储的是什么。
+正因为取名字是一件很重要的事,所以它也是一件很难的事。一个好的函数名、变量名应该能正确地表达出它的涵义。如
+
+
+在《编写可读代码的艺术》也提到了这几点:
+
+1. 选择专业的词。最好是可以和业务相关的,它应该极具表现力。
+2. 避免像tmp和retval这样泛泛的名字。不得不提到的一点是,tmp实在是一个有够烂的名字,将其变为timeTemp或者类似的会更直观。它只应该是名字中的一部分。
+3. 用具体的名字代替抽象的名字。
+4. 为名字赋予更多的信息。
+5. 名字应该有多长。
+6. 利用名字的格式来传递含义。
 
 ###函数长度
 
@@ -2811,12 +2821,36 @@ if (EchoesWorks.isObject(words)) {
 
 ###重命名
 
+在上一节中,我们提到了命名的重要性,这里首先要说到的也就是重命名。
+
 ###提取变量
 
+先让我们来看看一个简单的情况:
+
+```javascript
+if ($scope.goodSkills.indexOf('analytics') !== -1) {
+  skills.analytics = 5;
+}
+```
+
+在上面的代码里比较难以看懂的就是数字5,这时候你会怎么做?写一行注释?这里的5就是一个Magic Number。
+
+而实际上,最简单有效的办法就是把5提取成一个变量:
+
+
+```javascript
+var LEVEL_FIVE = 5;
+if ($scope.goodSkills.indexOf('analytics') !== -1) {
+  skills.analytics = LEVEL_FIVE;
+}
+```
+
 ###提炼函数
 
 ###内联函数
 
+###使用注释
+
 ###高级重构
 
 上面介绍的都是一些简单、基础、实用的重构技巧,更多精彩内容还是需要大家去好好掌握的。

+ 24 - 2
index.html

@@ -204,6 +204,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
 <li><a href="#提取变量">提取变量</a></li>
 <li><a href="#提炼函数">提炼函数</a></li>
 <li><a href="#内联函数">内联函数</a></li>
+<li><a href="#使用注释">使用注释</a></li>
 <li><a href="#高级重构">高级重构</a></li>
 </ul></li>
 <li><a href="#intellij-idea重构">Intellij Idea重构</a><ul>
@@ -2249,8 +2250,17 @@ $ git config --global user.email &quot;电子邮箱&quot;</code></pre>
 <p>只是首先,我们要知道我们要自己需要这些。</p>
 <p>首先要说的就是程序员认为最难的一个话题了——命名。</p>
 <h3 id="命名">命名</h3>
-<p>命名是一个特别长的,也是特别忧伤的故事。我想作为一个程序员的你,也相当恐惧这件事。</p>
-<p>一个好的函数名、变量名应该包含着这个函数的信息,如这个函数是干什么的,或者这个函数是怎么来的,这个变量名存储的是什么。</p>
+<p>命名是一个特别长的,也是特别忧伤的故事。我想作为一个程序员的你,也相当恐惧这件事。一个好的函数名、变量名应该包含着这个函数的信息,如这个函数是干什么的,或者这个函数是怎么来的,这个变量名存储的是什么。</p>
+<p>正因为取名字是一件很重要的事,所以它也是一件很难的事。一个好的函数名、变量名应该能正确地表达出它的涵义。如</p>
+<p>在《编写可读代码的艺术》也提到了这几点:</p>
+<ol type="1">
+<li>选择专业的词。最好是可以和业务相关的,它应该极具表现力。</li>
+<li>避免像tmp和retval这样泛泛的名字。不得不提到的一点是,tmp实在是一个有够烂的名字,将其变为timeTemp或者类似的会更直观。它只应该是名字中的一部分。</li>
+<li>用具体的名字代替抽象的名字。</li>
+<li>为名字赋予更多的信息。</li>
+<li>名字应该有多长。</li>
+<li>利用名字的格式来传递含义。</li>
+</ol>
 <h3 id="函数长度">函数长度</h3>
 <h3 id="函数嵌套">函数嵌套</h3>
 <h3 id="重复代码">重复代码</h3>
@@ -2269,9 +2279,21 @@ $ git config --global user.email &quot;电子邮箱&quot;</code></pre>
 </blockquote>
 <p>假设我们写这些代码只要半天,而别人读起来要一天。为什么不试着用一天的时候去写这些代码,让别人花半天或者更少的时间来理解。</p>
 <h3 id="重命名">重命名</h3>
+<p>在上一节中,我们提到了命名的重要性,这里首先要说到的也就是重命名。</p>
 <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">&#39;analytics&#39;</span>) <span class="op">!==</span> <span class="op">-</span><span class="dv">1</span>) <span class="op">{</span>
+  <span class="va">skills</span>.<span class="at">analytics</span> <span class="op">=</span> <span class="dv">5</span><span class="op">;</span>
+<span class="op">}</span></code></pre></div>
+<p>在上面的代码里比较难以看懂的就是数字5,这时候你会怎么做?写一行注释?这里的5就是一个Magic Number。</p>
+<p>而实际上,最简单有效的办法就是把5提取成一个变量:</p>
+<div class="sourceCode"><pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> LEVEL_FIVE <span class="op">=</span> <span class="dv">5</span><span class="op">;</span>
+<span class="cf">if</span> (<span class="va">$scope</span>.<span class="va">goodSkills</span>.<span class="at">indexOf</span>(<span class="st">&#39;analytics&#39;</span>) <span class="op">!==</span> <span class="op">-</span><span class="dv">1</span>) <span class="op">{</span>
+  <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>
 <h3 id="内联函数">内联函数</h3>
+<h3 id="使用注释">使用注释</h3>
 <h3 id="高级重构">高级重构</h3>
 <p>上面介绍的都是一些简单、基础、实用的重构技巧,更多精彩内容还是需要大家去好好掌握的。</p>
 <h2 id="intellij-idea重构">Intellij Idea重构</h2>