三個實用重構技術,改進你的代碼
大家好,我是漁夫子。
代碼重構是在不改變外部功能的情況下對現(xiàn)有代碼進行改進。它是編程的核心部分之一,不容忽視。否則,您就無法獲得更好的代碼版本。代碼重構可以增強代碼的可讀性、可維護性和可擴展性。它還旨在提高性能和開發(fā)人員的工作效率。今天,我們將探討一些可以幫助您更好地重構代碼的技巧。
如何重構
在尋找重構的技術之前,讓我們看看如何將代碼重構集成到編碼過程中。以下建議可用于此目的:
- 專門為重構代碼分配時間。
- 將較大的重構問題分解為較小的問題進行管理。
- 試著讓整個團隊參與重構過程。
- 使用可以幫助您查找常見重構錯誤的自動化工具。
現(xiàn)在,讓我們從用于重構的技術開始。
技術1:提取方法
此方法包括將代碼塊轉換為單獨的方法/函數(shù)。這樣做是為了改進代碼的結構和可讀性。它是通過將長而復雜的代碼塊提取成更小、更易于管理的方法來實現(xiàn)的。要使用這種技術,我們首先需要找到一個復雜的特定任務的代碼塊。然后我們提取其中的代碼并將其放入一個新的方法中。此外,請確保為該方法指定一個有意義的名稱。
示例:
重構前:
function calculateInvoiceTotal(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (!item.quantity || !item.price) {
console.error('Invalid item', item);
continue;
}
const itemTotal = item.quantity * item.price;
total += itemTotal;
}
return total;
}
重構后:
function calculateInvoiceTotal(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
const item = items[i];
const itemTotal = calculateItemTotal(item);
total += itemTotal;
}
return total;
}
function calculateItemTotal(item) {
if (!item.quantity || !item.price) {
console.error('Invalid item', item);
return 0;
}
return item.quantity * item.price;
}
你看,我們把循環(huán)中計算商品總價格的代碼提出成了一個單獨的函數(shù),第一個函數(shù)是不是變得簡單而且易讀了呢。
技術2:用符號常量替代數(shù)字
這個技巧是為了編寫更干凈、可讀性更強的代碼。魔幻數(shù)是指硬編碼的數(shù)值。寫硬編碼的數(shù)字會引起其他人的困惑,因為它們的目的沒有定義。將硬編碼的值轉換為具有有意義名稱的變量肯定會幫助其他人理解它。此外,您可以添加注釋以進行進一步解釋。它還可以幫助調試并降低將來出現(xiàn)錯誤的風險。
示例:
重構前:
if (temperature > 32) {
// Do something if temperature is above freezing
}
重構后:
const int FREEZING_POINT = 32;
if (temperature > FREEZING_POINT) {
// Do something if temperature is above freezing
}
技術3:合并重復的代碼
重復或相同的代碼可能出現(xiàn)在不同位置的代碼中。這個代碼不需要完全相同,但它可以執(zhí)行類似的任務,或者從原始代碼進一步擴展。重復的代碼可能會導致幾個問題:包括增加維護成本、難以更改代碼庫以及引入錯誤的更高風險。在重構代碼時,您必須注意重復的代碼。當找到這樣的代碼時,一種處理方法是將這樣的代碼轉換為單個可重用的函數(shù)/方法。
示例:
重構前
function calculateTotal(numbers) {
let total = 0;
for (let i = 0; i < numbers.length; i++) {
total += numbers[i];
}
return total;
}
function calculateAverage(numbers) {
let total = 0;
for (let i = 0; i < numbers.length; i++) {
total += numbers[i];
}
const average = total / numbers.length;
return average;
}
重構后:
function calculateSum(numbers) {
let total = 0;
for (let i = 0; i < numbers.length; i++) {
total += numbers[i];
}
return total;
}
function calculateTotal(numbers) {
return calculateSum(numbers);
}
function calculateAverage(numbers) {
const total = calculateSum(numbers);
const average = total / numbers.length;
return average;
}
在前面的代碼示例中,我們進行求和,然后再次求平均值。重構后,我們將其替換為為兩者提供和的函數(shù)。
結論
對于任何想要提高代碼質量、性能和可維護性的開發(fā)人員來說,重構都是必不可少的實踐。通過花時間分析和優(yōu)化代碼,您可以消除冗余,降低復雜性,并創(chuàng)建一個更高效、可擴展的應用程序。通過不斷審查和改進代碼,您可以創(chuàng)建一個更健壯、更有彈性的應用程序。我希望本文能幫助您理解一些重構技術。