乾淨整潔程式碼(Clean Code)的本質是什麼? - mariocervera

banq發表於2020-11-17

當我們聽到“整潔程式碼”一詞時,通常會想到由羅伯特·C·馬丁(Robert C. Martin)(也稱為鮑勃大叔、鮑勃大爺)撰寫的著名書籍:“整潔程式碼:敏捷軟體工藝手冊”(2009年)
自從本書出版以來,“整潔程式碼”一詞已經越來越流行。今天,它的含義受到鮑勃大叔的異象的強烈影響,但這並不意味著該術語在書出版之前從未使用過。
我認為,在本書出版之前,開發人員確實使用了“整潔程式碼”一詞。我還相信,開發人員自然會將術語與易於閱讀和維護的程式碼相關聯。
可讀性和可維護性是軟體的理想屬性;但是,它們並沒有給我們深刻的印象,即什麼是整潔的程式碼。這就是為什麼我想更深入地研究。除了可讀性和可維護性的基本屬性之外,我還想討論乾淨整潔程式碼的本質。
如果從更深層次看,您會發現乾淨整潔的程式碼是主觀的。例如,您可以將一段C ++程式碼視為不可讀,因為您不熟悉語法,但是經驗豐富的C ++程式設計師可能會不同意。
鮑伯大叔在他的書中意識到了乾淨程式碼的主觀性:
“它的定義可能與程式設計師一樣多”。
該宣告激發了我撰寫此部落格文章的興趣。我想分享乾淨的程式碼對我來說意味著什麼。我想回答“乾淨程式碼的本質是什麼?”這個問題。即使有很多專家已經比我做過的更好地回答了這個問題。
 

1.乾淨的程式碼讀起來就像一本好小說。
當程式碼乾淨時,您應該能夠坐在舒適的沙發上,在火爐旁,喝一杯美酒,在昏暗的燈光下享受程式碼,就像欣賞自己喜歡的小說一樣。
您可能會認為這是一種誇張,並且您是對的,但是程度比您想象的要小。閱讀乾淨的程式碼絕對應該很有趣,因為名字可以顯示意圖並告訴您一個故事。因為流程微不足道;因為陳述是如此簡單明瞭,以至於它們在您的視線中滑動;因為您必須使用的灰色單元格數量很少。
簡潔的程式碼告訴您一個引人入勝且易於遵循的故事。

乾淨整潔程式碼(Clean Code)的本質是什麼? - mariocervera
 

2.乾淨的程式碼很簡單。
簡潔的程式碼是如此簡單,以至於無法使作者看起來聰明。但是,很明顯,該程式碼是由努力的人編寫的。
因為簡單不容易。
您的第一次嘗試並沒有實現簡單性。首先,使程式碼正常工作,必要時忽略最佳實踐。然後,您進行重構,以使程式碼易於讀取和維護。

首先,使它起作用。然後,您做對了〜肯特·貝克。
 

3.乾淨的程式碼可測試。
上一節的必然結果是,如果不進行重構,就無法編寫乾淨的程式碼。而且,要成功重構,您需要自動測試以確保行為不會改變。因此,您需要測試以編寫乾淨的程式碼。
此外,自動化測試是程式碼保持乾淨的方式。
今天的程式碼有多幹淨都沒關係。如果沒有測試,您將無法自信地進行重構。因此,程式碼將變得不乾淨,因為隨著時間的流逝,程式碼往往會變得更加混亂和耦合。
重構和測試可以幫助您抵消這種趨勢。

程式碼的自然趨勢不是朝著乾淨整潔方向發展。相反。應對這種趨勢需要採取明確的行動。

4.乾淨的程式碼重點突出。
簡而言之,用幾句話就能完成一件事,並且做得很好。
編寫者不會使讀者負擔過多不必要的細節。目的很明確。沒有歧義。它沒有意外和意外的副作用。
如果呼叫“ isPrinterReady”,則知道該功能將僅檢查印表機是否已準備就緒,不會無意中刪除檔案。
乾淨的程式碼按其說的做,沒有意外的變化。
 

5.乾淨的程式碼不會重複
乾淨的程式碼說了一切。
這並不意味著可以盲目地消除重複。乾淨的程式碼避免了過早的抽象,並且知道,如果兩個相同的程式碼段代表不同的知識,則消除重複會帶來風險。

乾淨的程式碼遵循DRY原理,但是它承認DRY是關於知識重複而不是程式碼。
 

6.乾淨的程式碼講的是問題,而不是解決方案。
如果您的程式碼中的名稱包含計算機風格的詞語(例如“ DTO”),則它可能專注於“如何”。
乾淨的程式碼專注於“什麼”。
乾淨的程式碼使用的術語側重於問題域,而不是計算機上的特定解決方案。
這些術語處於正確的抽象級別。如果軟體模組在域層中,則程式碼將使用域模型的術語。如果模組在資料庫層中,它將談論資料庫。

乾淨的程式碼使用正確的抽象級別來討論要解決的問題。 
 乾淨整潔程式碼(Clean Code)的本質是什麼? - mariocervera
 

7.乾淨的程式碼密切關注細節。
在編寫簡潔的乾淨程式碼時,您會正確地獲取詳細資訊,並且不會做出任意決定。如果您宣告一個受保護的欄位,您就會知道為什麼不將其宣告為私有。如果宣告瞭動態陣列,就會知道為什麼靜態陣列不會更好。每個細節都很重要。
在乾淨的程式碼中,錯誤程式碼和異常是有意義的。錯誤處理是明確的;名稱是一致的;沒有記憶體洩漏;等等

在軟體開發中,細節至關重要。乾淨的程式碼可以識別這個事實。
 

8.乾淨的程式碼沒有壞氣味。
當您看到難聞的程式碼時,重構是明智之舉,因為設計異味通常是深層質量問題的徵兆。
乾淨的程式碼不會發出氣味,或者,如果有發出,則氣味很微弱。

  • 乾淨的程式碼不是嚴格的。很容易改變。
  • 乾淨的程式碼不是固定不變的。您可以輕鬆地重用它。
  • 乾淨的程式碼不是不透明的。意圖很容易理解。
  • 乾淨的程式碼並不脆弱。您可以更改它而不會引入錯誤。

如果發臭,請改一下〜肯特·貝克。
 

結論
在(希望)更深入地瞭解什麼是乾淨的程式碼之後,您可能會想知道:我為什麼要編寫乾淨的程式碼?
對我而言,主要原因是程式碼被讀取的次數遠遠超過其編寫的次數。因此,以快速閱讀為代價而偏愛快速寫入的解決方案效率低下。
例如,可能僅由於需要呼叫該方法並持有對該介面的引用而將一種方法新增到一個介面中,但這可能會使該介面的內聚性降低並且難以理解。
始終考慮您的行動的後果。不要在邁向乾淨程式碼的過程中退後一步。

快速前進的唯一方法就是身體健康〜Bob大叔。
 
我對軟體公司的卑鄙建議:
不再尋找油漆刷的專家,而將精力集中在尋找優秀的畫家上。將精力集中於尋找可以編寫乾淨程式碼的軟體工程師。這就是您快速並以可持續的步伐前進的方式。如果要敏捷,就必須注意技術卓越。如果編寫骯髒的程式碼,您將無法敏捷。
 

相關文章