《代碼整潔之道》閱讀筆記及感受
> Later equals never. >? > But the fault, dear Brutus, is not in our stars, but in ourselves, that we are underlings. >? > 我喜歡優(yōu)雅和高效的代碼。代碼邏輯應當直截了當,令缺陷難以隱藏;盡量減少依賴關(guān)系,使之使于維護;依據(jù)某種分層戰(zhàn)略完善錯誤處理代碼;性能調(diào)至最優(yōu),省得引誘別人做沒規(guī)矩的優(yōu)化,搞出一堆混亂來。整潔的代碼只做好一件事。 > ——Bjarne Stroustrup >? > 整潔的代碼簡單直接。整潔的代碼如同優(yōu)美的散文。整潔的代碼從不隱藏設(shè)計者的意圖,充滿了千凈利落的抽象和直截了當?shù)目刂普Z句。 > ——Grady Booch >? > 整潔的代碼應可由作者之外的開發(fā)者閱讀和增補。它應當有單元測試和驗收測試。它使用有意義的命名。它只提供一種而非多種做一件事的途徑。它只有盡量少的依賴關(guān)系,而且要明確地定義和提供清晰的、盡量少的 API。 代碼應通過其字面表達含義,因為不同的語言導致并非所有必需的信息均可通過代碼自身清晰表達。 > ——Dave Thomas >? > 我可以列出我留意到的整潔代碼的所有特點,但其中有一條是根本性的。整潔的代碼總是看起來像是某位特別在意它的人寫的。幾乎沒有政進的余地。代碼的作者什么都想到了,如果你企圖改進它,總會回到原點,贊嘆某人留給你的代碼——全心投入的某人留下的代碼。 > ——Micheal Feathers > >近年來,我開始研究貝克的簡單代碼規(guī)則,差不多也都琢磨透了。簡單代碼,依其重要順序: >能通過所有測試; >沒有重復代碼; >體現(xiàn)系統(tǒng)中的全部設(shè)計理念; >包括盡量少的實體,比如類、方法、函數(shù)等。 >在以上諸項中,我最在意代碼重復。如果同一段代碼反復出現(xiàn),就表示某種想法未在代碼中得到良好的體現(xiàn)。我盡力去找出那到底是什么,然后再盡力將其更清晣地表達出來。 >在我看來,有意義的命名是體現(xiàn)表達力的一種方式,我往往會修改好幾次才會定下名字來。借助 Eclipse 這樣的現(xiàn)代編碼工具,重命名代價極低,所以我無所顧忌。 >然而,表達力還不只體現(xiàn)在命名上。我也會檢查對象或方法是否想做的事太多。 >如果對象功能太多,最好切分為兩個或多個對象。如果方法功能太多,我總是使用抽取手段(Extract Method)重構(gòu)之,從而得到一個能較為清晣地說明其自身功能的方法,以及另外數(shù)個說明如何實現(xiàn)這些功能的方法。 >消除重復和提高表達力讓我在整潔代碼方面獲益良多,只要銘記這兩點,改進臟代碼時就會大為改觀。不過,我時常關(guān)注的另一規(guī)則就不太好解釋了。 >這么多年下來,我發(fā)現(xiàn)所有程序都由極為相似的元素構(gòu)成。例如“在集合中查找某物”。不管是雇員記錄數(shù)據(jù)庫還是鍵值對哈希表,或者某類條目的數(shù)組,我們都會發(fā)現(xiàn)自己想要從集合中找到某一特定條目。一旦出現(xiàn)這種情況,我通常會把實現(xiàn)手段封裝到更抽象的方法或類中。這樣做好處多多。 >可以先用某種簡單的手段,比如哈希表來實現(xiàn)這一功能,由于對搜索功能的引用指向了我那個小小的抽象,因此能隨需應變,修改實現(xiàn)手段。這樣既能快速前進,又能為末來的修改預留余地。 >另外,該集合抽象常常提醒我留意 “真正”在發(fā)生的事,避免隨意實現(xiàn)集合行為,因為我真正需要的不過是某種簡單的查找手段。 >減少重復代碼,提高表達力,提早構(gòu)建簡單抽象。這就是我寫整潔代碼的方法。 >——Ron Jeffries > >如果每個例程都讓你感到深合己意,那就是整潔代碼。如果代碼讓編程語言看起來像是專為解決那個問題而存在的,就可以稱之為漂亮的代碼。 >——Ward Cunningham