1. 我们在做什么?
<h4>编程式规则</h4>
<ul>
<li>DRY(不要重复自己,don't repeat yourself),</li>
<li>高内聚低耦合(loose coupling high cohesion),</li>
<li>YAGNI (你不会用到它的,ya ain't gonna need it),</li>
<li>最小意外原则(Principle of least surprise),</li>
<li>单一责任(single responsibility)等等。</li>
</ul>
<p>下面这种写法也更优雅,不过代码肯定是越直白越好,所以如果我们再深入挖掘,看看这段代码究竟做了什么事,我们会发现,它不过是在进行简单的加(add) 和乘(multiply)运算而已。</p>
<pre><code class="language-java">var add = function(x,y){
return x+y ;
}
var multiply = function(x,y){
return x*y
}
var flock_a = 4;
var flock_b = 2;
var flock_c = 0 ;
var result = add(multiply(flock_b, add(flock_a, flock_c)), multiply(flock_a, flock_b));
console.log(result) //16</code></pre>
<h5>上面用到的数学公式</h5>
<pre><code class="language-java">// 结合律(assosiative)
add(add(x, y), z) == add(x, add(y, z));
// 交换律(commutative)
add(x, y) == add(y, x);
// 同一律(identity)
add(x, 0) == x;
// 分配律(distributive)
multiply(x, add(y,z)) == add(multiply(x, y), multiply(x, z));</code></pre>
<h5>依据上面的共识修正</h5>
<pre><code class="language-java">// 原有代码
add(multiply(flock_b, add(flock_a, flock_c)), multiply(flock_a, flock_b));
// 应用同一律,去掉多余的加法操作(add(flock_a, flock_c) == flock_a)
add(multiply(flock_b, flock_a), multiply(flock_a, flock_b));
例如:4*3+4*3
// 再应用分配律
multiply(flock_b, add(flock_a, flock_a));
例如:4*(3+3)</code></pre>