什麼是程式碼整理?
在“改變生活的魔法”一文中,我描述了一種零碎的、日常程式碼衛生學,程式碼將變得混亂。好像沒有沒有羞恥感嗎,看到程式碼雜亂表明你已經學到了一些東西,整理就是做一些關於凌亂程式碼的事情。
TLCMOTUC描述了整理過程:讓事情變得更好,保持安全,慶祝進步。以下是一些需要整理的內容:
名稱
隨著時間的推移,名稱和意義可能會分開,團隊使用的詞彙不斷髮展,昨天的話可能不是今天的話。
整潔的名字是一次一個,讓下一位讀者理解更容易一些。
條件語句
條件邏輯是很好整理的,你希望程式碼閱讀者檢視條件時,能立即瞭解發生的情況。條件的某些用法會掩蓋了程式設計師的意圖。
錯誤使用條件的一種方式是隱藏簡單案例:
if(condition){ ...很多行... } else { ... 一行 ... } <p class="indent"> |
整理成:
if(!condition){ ... 一行 ... } else { ... 多行 ... } <p class="indent"> |
條件的意思是:“這裡有兩種可能的計算路徑。”然而,有時程式設計師想說,“這是一個先決條件。如果不滿足,則此計算無效/無必要。“例如,如果快取了值,則無需計算值。
if(cache){ return cache; } else { ...計算快取的值... return cache; } <p class="indent"> |
這段程式碼實際上並不是兩個條件同樣平衡的,它是有一個先決條件,如果不滿足才計算,使用Guard子句整理好:
if(cache)return cache; ...計算快取值.. <p class="indent"> |
返回快取;
下一位讀者會感謝你。
最後,有時程式設計師的意思是“按兩種方式中的一種計算值”,而不是“遵循這兩種執行方式中的一種”,整理這個:
if (condition) { temp := …something… } else { temp := …something else… } <p class="indent"> |
要使用三元運算子:
temp := condition ? …something… : …something else… <p class="indent"> |
冗餘
隨著程式碼的發展,本地最佳化的程式設計決策可能會留下混亂,這裡就有餘地實現更短、更清晰的替換。透過一次修復這些斑點來整理,將“if(flag == true)”替換為“if(flag)”(假設您的程式語言支援此項);將“collection.size == 0”替換為“collection.isEmpty”。
這種整理的想法是找到一種表達計算的主導統一方式,這樣能更短,更清晰地表達,而且在各方面都更好。
一個更極端的例子是當使用異常處理時,函式的返回值還能正常使用,不要使用比必要的更大的棍子。
萃取Extraction
表示式可以從簡單開始然後再增長,在每個步驟中,新增比分解更容易,這裡有需要整理的地方。
提取部件,併為臨時變數提供暗示名稱,這是一種整理表示式方式,如:
return new Point(...長表示式來計算x ...,...長表示式來計算y,y與x有很多不同地方...) <p class="indent"> |
整理成:
x:=計算x的表示式; y:=計算y的表示式; return new Point(x, y); <p class="indent"> |
在整理它時完全可以提取單個解釋變數,稍後才有時間整理表達的其餘部分。
提取例程也可以整理,所有人性化的IDE現在都支援自動提取功能。整理時,對函式可自由提取為一種helper性質函式,稍後才有時間呼叫您的新helper函式。
一個更雄心勃勃的(也許我應該說“勇敢”)整理是提取一個方法物件。方法物件通常可以實現戲劇性的後續清理。在整理時只需提取成新物件並呼叫即可,許多工作其實只需要一次程式碼提交就完成。
重新排序
最後的整理是按照讀者想要的順序對檔案中的元素進行排序。取決於你的程式碼閱讀者,可能會先將所有幫助程式放在最後;然後將主邏輯流程放在最後;或者可能先擁有主流程,然後再執行幫助程式等。
input(){ ... stuff ... } process(){ ... stuff ... } output(){ ... stuff ... } main(){ input() process() output() } <p class="indent"> |
要麼 主在前:
main(){ input() process() output() } input(){ ... stuff ... } process(){ ... stuff ... } output(){ ... stuff ... } <p class="indent"> |
在重新排序時,可能會看到其他整理的可能性。那就不得不等待下一個差異。完成重新排序並進行整理,然後再整理一些。
總結
寫這篇文章時我很驚訝。我曾經一直說,“保持很小的整理差異,因為以後會有時間再進行更多的整理。”那種以後會有足夠時間的態度與我通常的情況完全相反,他們會說“我們現在必須清理,因為我們永遠不會有另一次機會。”
如果你有足夠的時間,你會怎麼樣?嘗試一下,也許額外的能量、創造力和整潔性將使你能夠完成更多整理,而不是更少,每次只整理一點,等有時間再進行更多整理,也許會有更多驚喜發現,那多酷啊!
但是,整理不能變為程式新增新邏輯,這是一個富有成效的小工具微調器,當你知道你想寫什麼,然後寫它,後面再整理。
相關文章
- 低程式碼是什麼?
- 低程式碼是什麼意思?
- 低程式碼是什麼意思
- 通過程式碼解釋什麼是API,什麼是SDK?API
- 什麼是程式碼審計?程式碼審計有什麼好處?
- 低程式碼是什麼意思?低程式碼平臺的技術特點是什麼?
- html的空格程式碼是什麼HTML
- HTTP狀態程式碼是什麼?HTTP
- 什麼是低程式碼的窘境?
- 這是什麼騷批程式碼!
- 什麼是 unicode 程式碼點Unicode
- 什麼是程式碼覆蓋率
- 什麼樣的程式碼稱得上是好程式碼?
- 什麼是低程式碼(Low-Code)?
- 幽默:什麼是業務邏輯程式碼?
- 什麼是低程式碼?低程式碼平臺能解決什麼樣的問題?
- 低程式碼的概念和目的是什麼?
- Android之什麼是樁程式碼(Stub)?Android
- 低程式碼的技術原理是什麼?
- 什麼是遠端程式碼執行漏洞?
- 什麼是HTTP 304狀態程式碼?HTTP
- 什麼是整潔的程式碼(Clean Code)?
- 低程式碼與無程式碼真正的區別是什麼
- 無程式碼和低程式碼最大的區別是什麼?
- 一文看懂“低程式碼,零程式碼,APAAS”是什麼?怎麼選?
- PS指令碼篇--1.程式碼是什麼,寫程式碼幹嘛?指令碼
- 程式執行緒新解:什麼是程式?什麼是執行緒?執行緒
- 低程式碼開發平臺是什麼意思?
- 火熱的低程式碼到底是什麼?
- 什麼是規則即程式碼 (RaC) - brcommunityUnity
- 什麼是Shell指令碼?指令碼
- keyiso是什麼程式?
- 什麼是程式語言
- 什麼是程式的API?API
- 熱點淺談:低程式碼開發平臺是什麼?低程式碼具備什麼特點?
- 微信小程式是什麼 微信小程式有什麼用?微信小程式
- 什麼是程式語言,什麼是Python直譯器Python
- 什麼是基礎架構即程式碼(IaC)-dev架構dev