重構心得分享----拆分循環

最近自己再看《重構-改善既有代碼的設計》,這是一本關於如何讓大家去發現需要重構的代碼和如何去進行重構。

先分享一個今天剛剛看的,標題叫拆分循環,作者認爲一個循環裏面儘可能的只做一件事情。

舉一個粒子,比如一個循環裏面有兩件事,一個是計算收入總值(數據累加),一個是找出最小收入

let total = 0
let data = [15, 25, 3, 65, 15]
let min = data[0]
for (let i = 0; i < data.length; i++) {
 total += data[i]
 if (data[i] < min) {
 min = data[i]
 }
}
console.log(total, min)

對於這樣代碼,我們首先認爲 既然可以一次性作爲兩件事爲什麼要寫兩個for循環去做這件事呢?

我先給大家看一下 重構後的代碼 在給大家講解 它那樣做的 好處是什麼

第一次重構如下

function totalData() {
 let total = 0
 for (let i = 0; i < data.length; i++) {
 total += data[i]
 }
 return total
}

function minData() {
 let min = data[0]
 for (let i = 0; i < data.length; i++) {
 if (data[i] < min) {
 min = data[i]
 }
 }
 return min
}

將兩件事拆開了,並且封裝成了函數

第二次重構

function totalData() {
 return data.reduce((total, p) => total + p)
}

function minData() {
 return Math.min(...data)
}

到這一步在和第一次對比 你就會明顯發現沒有了for循環了 取而代之的是管道的形式

這樣做的好處是 當你需要重新修改某一件事情,你就可以直接寫個改件是的業務邏輯,而不用去看這個修改會不會影響到第二件事情。同時使用管道方法替代for循環也是一種  代碼的提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章