自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

30多年的編碼經(jīng)驗濃縮成的10條實踐

開發(fā) 前端 移動開發(fā)
作為一個要實現(xiàn)特定功能的開發(fā)者,代碼可以實現(xiàn)你的短期目標(biāo),但如果沒有其他人希望重用它(包括未來的自己),這些代碼一定會缺失某些東西。無論它是太復(fù)雜,還是太具體,在不同情況下都有很大可能會出錯,或者不被其他開發(fā)者信任。

30多年的編碼經(jīng)驗濃縮成的10條最佳實踐

所以,如何寫出一手好代碼?

良好的代碼更易于閱讀、理解、調(diào)試和修改,最重要的是它的缺陷也更少。顯然,編寫良好的代碼需要更多的時間,但是從長遠(yuǎn)來看,它也具有更多的價值,因為這降低了維護(hù)的成本,而且具有更好的可重用性。

事實上,我們可以將好的代碼等同為可重用的代碼,這也是本篇文章羅列的許多技巧背后的驅(qū)動原則。作為一個要實現(xiàn)特定功能的開發(fā)者,代碼可以實現(xiàn)你的短期目標(biāo),但如果沒有其他人希望重用它(包括未來的自己),這些代碼一定會缺失某些東西。無論它是太復(fù)雜,還是太具體,在不同情況下都有很大可能會出錯,或者不被其他開發(fā)者信任。

我發(fā)現(xiàn),只要嘗試堅持將下面的最佳實踐應(yīng)用于你編寫的所有代碼(包括你的實驗和原型),無論你現(xiàn)在的經(jīng)驗水平如何,都會編寫出更好的代碼。

1. 遵循單一職責(zé)原則

函數(shù)是程序員的工具中最重要的抽象形式。它們能更多地被重復(fù)使用,你需要編寫的代碼就越少,代碼也因此變得更可靠。較小的函數(shù)遵循單一職責(zé)原則更有可能被重復(fù)使用。

2. 盡量減少共享狀態(tài)

你應(yīng)該盡量減少函數(shù)之間的隱式共享狀態(tài),無論它是文件作用域的變量還是對象的成員字段,這有利于明確要求把值作為參數(shù)。當(dāng)能明確地顯示函數(shù)需要什么才可以產(chǎn)生所需的結(jié)果時,代碼會變得更容易理解和重用。

對此的一個推論是,在一個對象中,相對于成員變量,你更應(yīng)該優(yōu)先選擇靜態(tài)的無狀態(tài)變量 (static stateless variables)。

3. 將“副作用”局部化

理想的副作用(例如:打印到控制臺、日志記錄、更改全局狀態(tài)、文件系統(tǒng)操作等)應(yīng)該被放置到單獨的模塊中,而不是散布在整個代碼里面。函數(shù)中的一些“副作用”功能往往違反了單一職責(zé)原則。

4. 優(yōu)先使用不變的對象

如果一個對象的狀態(tài)在其構(gòu)造函數(shù)中僅被設(shè)置一次,并且從不再次更改,則調(diào)試會變得更加容易,因為只要構(gòu)造正確就能保持有效。這也是降低軟件項目復(fù)雜性的最簡單方法之一。

5. 多用接口少用類

接收接口的函數(shù)(或 C++ 中的模板參數(shù)和概念)比在類上運行的函數(shù)更具可重用性。

6. 對模塊應(yīng)用良好的原則

尋找機(jī)會將軟件項目分解成更小的模塊(例如庫和應(yīng)用程序),以促進(jìn)模塊級別的重用。對于模塊,應(yīng)該遵循的一些關(guān)鍵原則是:

  • 盡可能減少依賴
  • 每個項目應(yīng)該有一個明確的職責(zé)
  • 不要重復(fù)自身
  • 你應(yīng)該努力使你的項目保持小巧和明確。

7. 避免繼承

在面向?qū)ο缶幊讨?,繼承 —— 特別是和虛擬函數(shù)結(jié)合使用時,在可重用性方面往往是一條死胡同。我很少有成功的使用或編寫重載類的庫的經(jīng)歷。

8. 將測試作為設(shè)計和開發(fā)的一部分

我不是測試驅(qū)動開發(fā)的堅定分子,但開始編碼時先編寫測試代碼會使得代碼十分自然地遵循許多指導(dǎo)原則。這也有助于盡早發(fā)現(xiàn)錯誤。不過要注意避免編寫無用的測試,良好的編碼實踐意味著更高級別的測試(例如單元測試中的集成測試或特征測試)在揭示缺陷方面更有效。

9. 優(yōu)先使用標(biāo)準(zhǔn)庫而不是手寫的

我經(jīng)常看到更好版本的 std::vector 或 std::string,但這幾乎總是浪費時間和精力。一個明顯的事實是 —— 你正在為一個新的地方引入 bug,其他開發(fā)者也不太可能重用你的代碼,因為沒有被廣泛理解、支持和測試。

10. 避免編寫新的代碼

這是每個程序員都應(yīng)遵循的最重要的教誨:最好的代碼就是還沒寫的代碼。你寫的代碼越多,你將遇到的問題就越多,查找和修復(fù)錯誤就越困難。

在寫一行代碼之前先問一問自己,有沒有一個工具、函數(shù)或者庫已經(jīng)實現(xiàn)了你所需要的功能?你真的需要自己實現(xiàn)這個功能,而不是調(diào)用一個已經(jīng)存在的功能嗎?

寫在最后的話

我發(fā)現(xiàn)編程是一門與學(xué)習(xí)藝術(shù)或運動非常相似的技能,你通過刻意的練習(xí)和從別人的經(jīng)驗中學(xué)習(xí)會得到更好的結(jié)果。不斷提升你產(chǎn)出的代碼質(zhì)量有助于你成為更優(yōu)秀的程序員。

責(zé)任編輯:未麗燕 來源: 程序師
相關(guān)推薦

2017-08-30 11:10:25

代碼

2017-08-30 19:32:08

代碼程序員編程

2014-09-25 09:59:06

2013-12-13 14:09:39

鮑爾默微軟

2014-12-15 14:39:00

Java

2021-07-05 08:30:18

阿里技術(shù)工程師

2010-12-02 08:12:16

2015-09-08 09:38:11

2009-05-13 14:51:52

IT人職場技能

2019-12-05 14:19:20

設(shè)計用戶搜索

2017-11-17 08:00:03

軟件開發(fā)程序員前輩經(jīng)驗

2011-12-26 17:18:25

程序員

2018-03-16 10:41:26

公有云多云CIO

2020-07-10 10:39:04

Python開發(fā)工具

2014-10-29 13:52:38

程序員

2021-08-04 11:18:09

手機(jī)性價比技術(shù)

2018-05-29 19:39:26

IT經(jīng)驗技術(shù)

2012-04-27 16:54:57

Java代碼

2016-02-24 09:41:44

IT人士經(jīng)驗教訓(xùn)

2010-05-19 17:24:55

MySQL編碼
點贊
收藏

51CTO技術(shù)棧公眾號