3個Go語言中實用重構(gòu)技術(shù)分享
代碼重構(gòu)是在不改變外部功能的情況下對現(xiàn)有代碼進行改進。它是編程的核心部分之一,不容忽視。否則,您就無法獲得更好的代碼版本。代碼重構(gòu)可以增強代碼的可讀性、可維護性和可擴展性。它還旨在提高性能和開發(fā)人員的工作效率。今天,我們將探討一些可以幫助您更好地重構(gòu)代碼的技巧。
如何重構(gòu)
在尋找重構(gòu)的技術(shù)之前,讓我們看看如何將代碼重構(gòu)集成到編碼過程中。以下建議可用于此目的:
- 專門為重構(gòu)代碼分配時間。
- 將較大的重構(gòu)問題分解為較小的問題進行管理。
- 試著讓整個團隊參與重構(gòu)過程。
- 使用可以幫助您查找常見重構(gòu)錯誤的自動化工具。
現(xiàn)在,讓我們從用于重構(gòu)的技術(shù)開始。
技術(shù)1:提取方法
此方法包括將代碼塊轉(zhuǎn)換為單獨的方法/函數(shù)。這樣做是為了改進代碼的結(jié)構(gòu)和可讀性。它是通過將長而復(fù)雜的代碼塊提取成更小、更易于管理的方法來實現(xiàn)的。要使用這種技術(shù),我們首先需要找到一個復(fù)雜的特定任務(wù)的代碼塊。然后我們提取其中的代碼并將其放入一個新的方法中。此外,請確保為該方法指定一個有意義的名稱。
示例
重構(gòu)前:
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; ????}
重構(gòu)后:
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ù)是不是變得簡單而且易讀了呢。
技術(shù)2:用符號常量替代數(shù)字
這個技巧是為了編寫更干凈、可讀性更強的代碼。魔幻數(shù)是指硬編碼的數(shù)值。寫硬編碼的數(shù)字會引起其他人的困惑,因為它們的目的沒有定義。將硬編碼的值轉(zhuǎn)換為具有有意義名稱的變量肯定會幫助其他人理解它。此外,您可以添加注釋以進行進一步解釋。它還可以幫助調(diào)試并降低將來出現(xiàn)錯誤的風(fēng)險。
示例
重構(gòu)前:
if?(temperature?>?32)?{ ????//?Do?something?if?temperature?is?above?freezing }
重構(gòu)后:
const?int?FREEZING_POINT?=?32; if?(temperature?>?FREEZING_POINT)?{ ????//?Do?something?if?temperature?is?above?freezing }
技術(shù)3:合并重復(fù)的代碼
重復(fù)或相同的代碼可能出現(xiàn)在不同位置的代碼中。這個代碼不需要完全相同,但它可以執(zhí)行類似的任務(wù),或者從原始代碼進一步擴展。重復(fù)的代碼可能會導(dǎo)致幾個問題:包括增加維護成本、難以更改代碼庫以及引入錯誤的更高風(fēng)險。在重構(gòu)代碼時,您必須注意重復(fù)的代碼。當(dāng)找到這樣的代碼時,一種處理方法是將這樣的代碼轉(zhuǎn)換為單個可重用的函數(shù)/方法。
示例
重構(gòu)前
?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; }
重構(gòu)后:
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; }
在前面的代碼示例中,我們進行求和,然后再次求平均值。重構(gòu)后,我們將其替換為為兩者提供和的函數(shù)。
結(jié)論
對于任何想要提高代碼質(zhì)量、性能和可維護性的開發(fā)人員來說,重構(gòu)都是必不可少的實踐。通過花時間分析和優(yōu)化代碼,您可以消除冗余,降低復(fù)雜性,并創(chuàng)建一個更高效、可擴展的應(yīng)用程序。通過不斷審查和改進代碼,您可以創(chuàng)建一個更健壯、更有彈性的應(yīng)用程序。我希望本文能幫助您理解一些重構(gòu)技術(shù)。
到此這篇關(guān)于3個Go語言中實用重構(gòu)技術(shù)分享的文章就介紹到這了,更多相關(guān)Go重構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言實現(xiàn)百萬級WebSocket連接架構(gòu)設(shè)計及服務(wù)優(yōu)化
本文將詳細(xì)介紹如何在Go中構(gòu)建一個能夠支持百萬級WebSocket連接的服務(wù),包括系統(tǒng)架構(gòu)設(shè)計、性能優(yōu)化策略以及具體的實現(xiàn)步驟和代碼示例2024-01-01Go中函數(shù)的使用細(xì)節(jié)與注意事項詳解
在Go語言中函數(shù)可是一等的(first-class)公民,函數(shù)類型也是一等的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Go中函數(shù)的使用細(xì)節(jié)與注意事項的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11一文帶你掌握掌握 Golang結(jié)構(gòu)體與方法
在 Golang 中,結(jié)構(gòu)體和方法是實現(xiàn)面向?qū)ο缶幊痰闹匾M成部分,也是 Golang 的核心概念之一。在本篇文章中,我們將深入介紹 Golang 結(jié)構(gòu)體與方法的概念、使用方法以及相關(guān)的編程技巧和最佳實踐2023-04-04Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)
最近在研究go語言,發(fā)現(xiàn)go語言系統(tǒng)調(diào)用源碼只有調(diào)用函數(shù)的定義,今天通過本文給大家分享Golang標(biāo)準(zhǔn)庫syscall詳解及什么是系統(tǒng)調(diào)用,感興趣的朋友一起看看吧2021-05-05golang替換無法顯示的特殊字符(\u0000,?\000,?^@)
這篇文章主要介紹了golang替換無法顯示的特殊字符,包括的字符有\(zhòng)u0000,?\000,?^@等,下文詳細(xì)資料,需要的小伙伴可以參考一下2022-04-04Go單元測試對數(shù)據(jù)庫CRUD進行Mock測試
這篇文章主要為大家介紹了Go單元測試對數(shù)據(jù)庫CRUD進行Mock測試的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06