英文:christopher diggins 譯文:開源中國
my.oschina.net/editorial-story/blog/1525762
所以,如何寫出一手好**?
良好的**更易於閱讀、理解、除錯和修改,最重要的是它的缺陷也更少。顯然,編寫良好的**需要更多的時間,但是從長遠來看,它也具有更多的價值,因為這降低了維護的成本,而且具有更好的可重用性。
事實上,我們可以將好的**等同為可重用的**,這也是本篇文章羅列的許多技巧背後的驅動原則。作為乙個要實現特定功能的開發者,**可以實現你的短期目標,但如果沒有其他人希望重用它(包括未來的自己),這些**一定會缺失某些東西。無論它是太複雜,還是太具體,在不同情況下都有很大可能會出錯,或者不被其他開發者信任。
我發現,只要嘗試堅持將下面的最佳實踐應用於你編寫的所有**(包括你的實驗和原型),無論你現在的經驗水平如何,都會編寫出更好的**。
1. 遵循單一職責原則
函式是程式設計師的工具中最重要的抽象形式。它們能更多地被重複使用,你需要編寫的**就越少,**也因此變得更可靠。較小的函式遵循單一職責原則更有可能被重複使用。
2. 儘量減少共享狀態
你應該儘量減少函式之間的隱式共享狀態,無論它是檔案作用域的變數還是物件的成員字段,這有利於明確要求把值作為引數。當能明確地顯示函式需要什麼才可以產生所需的結果時,**會變得更容易理解和重用。
對此的乙個推論是,在乙個物件中,相對於成員變數,你更應該優先選擇靜態的無狀態變數 (static stateless variables)。
3. 將「***」區域性化
理想的***(例如:列印到控制台、日誌記錄、更改全域性狀態、檔案系統操作等)應該被放置到單獨的模組中,而不是散布在整個**裡面。函式中的一些「***」功能往往違反了單一職責原則。
4. 優先使用不變的物件
如果乙個物件的狀態在其建構函式中僅被設定一次,並且從不再次更改,則除錯會變得更加容易,因為只要構造正確就能保持有效。這也是降低軟體專案複雜性的最簡單方法之一。
5. 多用介面少用類
接收介面的函式(或 c++ 中的模板引數和概念)比在類上執行的函式更具可重用性。
6. 對模組應用良好的原則
尋找機會將軟體專案分解成更小的模組(例如庫和應用程式),以促進模組級別的重用。對於模組,應該遵循的一些關鍵原則是:
盡可能減少依賴
每個專案應該有乙個明確的職責
不要重複自身
你應該努力使你的專案保持小巧和明確。
7. 避免繼承
在物件導向程式設計中,繼承 —— 特別是和虛函式結合使用時,在可重用性方面往往是一條死胡同。我很少有成功的使用或編寫過載類的庫的經歷。
8. 將測試作為設計和開發的一部分
我不是測試驅動開發的堅定分子,但開始編碼時先編寫測試**會使得**十分自然地遵循許多指導原則。這也有助於盡早發現錯誤。不過要注意避免編寫無用的測試,良好的編碼實踐意味著更高階別的測試(例如單元測試中的整合測試或特徵測試)在揭示缺陷方面更有效。
9. 優先使用標準庫而不是手寫的
我經常看到更好版本的 或 ,但這幾乎總是浪費時間和精力。乙個明顯的事實是 —— 你正在為乙個新的地方引入 bug,其他開發者也不太可能重用你的**,因為沒有被廣泛理解、支援和測試。
10. 避免編寫新的**
這是每個程式設計師都應遵循的最重要的教誨:最好的**就是還沒寫的**。你寫的**越多,你將遇到的問題就越多,查詢和修復錯誤就越困難。
在寫一行**之前先問一問自己,有沒有乙個工具、函式或者庫已經實現了你所需要的功能?你真的需要自己實現這個功能,而不是呼叫乙個已經存在的功能嗎?
寫在最後的話
我發現程式設計是一門與學習藝術或運動非常相似的技能,你通過刻意的練習和從別人的經驗中學習會得到更好的結果。不斷提公升你產出的**質量有助於你成為更優秀的程式設計師。
30 多年的編碼經驗總結成 10 條最佳實踐
所以,如何使 變得更好?好的 可以被識別為易於閱讀 理解 除錯和修改的 而且最重要的是很少有缺陷。顯然,編寫好的 需要花費更多的時間,但從長遠來看,它也有更多的價值,因為維護成本更低,而且更易於重用。事實上,我們可以將好的 與可重用的 等同起來,這是在這裡列出的許多技巧背後的驅動原則。可能實現您的短...
多年的Window平台開發經驗對鍵盤的理解
然後就是各種電腦房的那種大腦袋顯示器的不知道什麼品牌的鍵盤,感覺大部分是白色的,還很厚重,印象裡那種鍵盤不是用來打字,而是用wasd這幾個按鍵打遊戲,天天泡電腦房裡面打cs和各種遊戲。再然後就是高中畢業了,家裡給我買了一台方正牌的電腦,當時我簡直跟做夢一樣,從來沒想到自己會有一台電腦,然後一直用到大...
10多年來學習英語的悲哀!
今天休息,沒有什麼事情可做,家裡的家務早就被我的岳母娘收拾乾淨了,突然覺得很無聊了,看到公司的總工 比較牛的 跟法國的工程師用流利英語進行交流,心裡頓時的羨慕,回到家來,捧起creazy english 重溫大學時學過的英語資料,看了個多小時,發現以前能看懂的文章,有好多的英語詞語都好似相識又好像什...