1. 程式人生 > >整潔程式碼的理解

整潔程式碼的理解

前段時間看了《程式碼整潔之道》這本書,書中的一些觀點講的很不錯,這些觀點很容易讓人對號入座,也很容易讓人知道自己寫的程式碼是否漂亮、是否整潔。通過這篇文章記錄下讀後感和書中的一些觀點。

為什麼要整潔程式碼

  • 很多時候我們修復bug或開發新功能時都會先看看周邊的相關程式碼(開發過程中經常碰到前面寫的程式碼到後面就忘了,回看程式碼是常事),如果想要bug或新功能寫的輕鬆那自然就要求程式碼閱讀也輕鬆。不整潔的程式碼閱讀起來會輕鬆嗎。
  • 相信很多人都不願意去接手別人寫的二手程式碼,為什麼呢,因為很多人寫的程式碼質量很一般,讓其他的人閱讀他的程式碼很是困難。所以整潔的程式碼也能幫助其他人輕鬆的理解自己的程式碼。

整潔程式碼核心思想

如何在意程式碼 這跟生活是一個道理,當你真正在意某件事情的時候,在意到什麼程度,事情在意程度不一樣,對事情的處理態度和方式也不一樣。所以只有你真正的在意你寫的程式碼,你才會去關注程式碼的質量,寫出整潔漂亮的程式碼。

我有一個Android開發的QQ群,經常在群裡聽到有人說公司領導不在乎程式碼質量和實現過程,只關注結果,所以他們也不關注自己寫的程式碼是否漂亮是否整潔,只求趕快完成功能交差。我相信有很多這樣的程式設計師都是這樣,只追求功能實現,從來不管程式碼寫的怎麼樣,因為他們不注重自己寫的程式碼怎麼樣,他們只看重自己能不能在規定時間內向領導交差。

天敵:後面再優化

很多程式設計師都有一個習慣,經常會說:先實現目前的功能,等後面有時間了再來優化程式碼。其實大家也知道結果了,基本上大部分的人後面都不會去做什麼程式碼優化,前面的說辭也變成了說說而已。

所以寫程式碼的時候如果當時能寫出更好的程式碼就當時一次性寫好,不要想著以後再去優化,這基本是不可能的了。時間長了就會在不知不覺中養成習慣,如果每次都想著以後再優化,那每次寫程式碼基本上都不會去關注程式碼的質量,相反每次編碼都儘自己最大努力去寫好,時間長了你的程式碼質量和要求自然就上去了。

什麼樣的程式碼是整潔程式碼

  • 程式碼邏輯一目瞭然,很清楚方法、類、模組做的是什麼事情
  • 整潔的程式碼只專注於做好一件事(不論是方法、類還是模組),處理的事情多了,自然就會讓邏輯變的複雜
  • 讓程式碼塊小,小塊的程式碼便於閱讀和理解
  • 儘量減少依賴,讓程式碼便於維護
  • 效能調至最優,省得引誘做沒規矩的優化,搞出一堆混亂程式碼來
  • 依據某種分層戰略完善錯誤處理程式碼

如何寫出整潔程式碼

  1. 減少重複程式碼,提高程式碼表達力,提早構建簡單抽象。
  2. 使用異常代替錯誤碼
    • 錯誤碼通常是列舉或者是常量,而這樣的錯誤碼就像磁鐵一樣,導致所有用到這些錯誤碼類都需要匯入引用它,一旦錯誤碼需要修改就需要修改所有的這些類。而使用異常則不會存在這些問題,新異常可以從異常類裡直接派生出來,而不需要修改已有程式碼。
  3. 對方法和類取有意義的命名
    1. 名副其實
      • 如果名稱需要註釋來補充,那就不算名副其實
    2. 避免誤導
      • 例如:字母l和數字1,字母o和數字0
      • 不要使用外形太像的命名方式,比如:ControllerForEfficientHandlingOfStrings和ControllerForEfficientStorageOfStrings
    3. 做有意義的區分
    4. 使用讀得出來的名稱
    5. 使用可搜尋的名稱
      • 使用方便搜尋查詢的名稱命名變數
      • 長名稱勝於短名稱,搜得到的名稱勝於用自造編碼代寫的名稱
    6. 類名和物件名應該是名稱或名詞短語。類名不應當是動詞。
    7. 方法名應當是動詞或動詞短語
  4. 讓函式表達其意圖,該給函式賦予哪些屬性,好讓讀者一看就知道函式是什麼樣的程式
    1. 函式要短小
    2. 只做一件事
    3. 函式引數儘量少
    4. 輸出引數比輸入更難以理解,儘量以返回值作為輸出
    5. 不要用標記引數(boolean),這樣會增加函式的理解度和複雜度
    6. 函式有多個引數的話,就需要考慮將多個引數封裝成一個類了
    7. 不要在函式中做函式名以外的事情
    8. 不要使用輸出引數
    9. 抽離try-catch程式碼塊(處理錯誤異常也是一件事,所以要抽離)
  5. 先按照思路實現,然後再斟酌打磨,按照規則打磨出整潔的程式碼