消除代碼中的壞味道,編寫高質量代碼

消除代碼中的壞味道,編寫高質量代碼

Intro

想要寫出較好的代碼,保證代碼的高質量須要時刻警戒代碼中的壞味道,今天分享一下,我以爲平時寫的代碼中可能會出現的壞味道代碼的一些示例數組

常見的壞味道代碼

  1. Bug Logically(null check etc.)

嚴格的來講,這多是一個 BUG 級別的代碼了,最簡單的一個實例,你應該明確你的輸入數據是否是可能爲 null,若是可能爲 null 須要檢查一下,有一些代碼中每每會在代碼中寫下一些坑,明明這個變量是 null 仍是直接用這個變量中的屬性或方法spa

還有一種狀況是明確對象不是 null 的狀況下就不要 null check 或使用 null 傳播符號,下面的這個是一個錯誤示例:code

var list = new List<int>(){1,2,3,-2,3,6,2};
var arr = list?.Where(x=>x>0)?.Where(x=>(x%2)==0)?.ToArray()

上面的代碼裏 list 是不會爲 null 的因此 list 後不須要加 ?Where 這個 LINQ 方法是不會返回一個 null 的,因此 Where 後面也是不須要加 ?對象

這裏特別想說一下,不少人對象 FirstFirstOrDefault 的用法有些不清楚,若是能找到數據而且要找到第一個數據就用 First,若是找不到會有 exception,
FirstOrDefault 在不肯定有沒有的時候用它更合適,若是沒有就返回一個默認值。it

  1. unnecessary namespace using

代碼中沒有用到的命名空間引用請移除它,避免沒必要要的代碼io

  1. unused code, commented code

沒有用到的代碼或者被註釋的代碼直接從代碼中刪除,不要保留在代碼庫中,一個是可能會讓人很費解,一個是沒有任何用處class

如今咱們的代碼基本都會使用源代碼版本管理,若是沒有,我建議你使用,這樣能夠保證每次修改都是一個版本,可追溯版本管理

  1. exception throw

在應用中主動拋異常的時候應該拋出具體的異常,例如參數爲 null 的時候應該拋出 throw new ArgumentNullException("paramName") 而不是 throw new Exception()變量

還有一些異常應該是系統內部拋出的異常,不該該從用戶代碼中拋出,例如: IndexOutOfRangeException重構

  1. obsolete members

對於過期的方法,咱們通常會標記一個 [Obsolete],標記的同時應該提供一個 message 提示用戶不要使用這個方法或者使用哪個方法代替

  1. 抽象類

抽象類的構造器方法應該是 protected,由於抽象類是不能實例化的,因此抽象類的構造方法是否是被直接調用的,因此一般來講應該考慮抽象類的構造方法設置爲 protected

抽象類中外部要使用的方法才設置爲 public,僅內部會用到的成員設置爲 protected 便可,體現封裝特性,最小化訪問權限

  1. 方法重載

方法重載應該放在一塊兒,這樣方便咱們查找代碼,也會更方便了解這個方法的參數

  1. method complexity

減小方法的複雜度,不要讓一個方法過於複雜,若是太複雜了就可能須要考慮重構了,方法參數不能太多,方法邏輯不要太複雜,詳細能夠參考上一篇文章方法重構分析

  1. IEnumerable<T>

對於 IEnumerable<T> 使用 Any() 來代替 Count()==0

對於數組和列表分別使用 array.Lengthlist.Count 代替 Count()

Recommendations

推薦爲你的 Visual Studio 安裝 CodeMaidReSharper

使用 CodeMaid 來作代碼整理,一般我會使用 CodeMaid 來自動整理代碼,防止有些地方會有多餘的空格,和自動清理命名空間,除此以外 CodeMaid 還有一個比較讚的功能是在使用 region 來區分代碼塊的時候,CodeMaid 會在 EndRegion 處增長對應的 Region 的描述信息,這樣方法較長,region 較多的狀況下會比較容易區分哪裏是哪一部分的會比較清晰

遵循 ReSharper 的建議編寫更整潔的代碼,ReSharper 會提供不少實用的建議,好比使用新的 C# 語法來簡化代碼,移除沒有使用的變量等不少很實用的建議,按照 ReSharper 的建議咱們就能夠比較輕鬆的寫出比較良好的代碼,有時候 ReSharper 的命名規則可能會於本身的習慣不符,能夠經過定製 editorconfig 來指定命名規範

More

Resharper 也有代碼整理的,不過我沒用過,習慣了 CodeMaid 了,有興趣的能夠研究一下,一塊兒交流一下哈~~

相關文章
相關標籤/搜索