4. 函數

每個函數都應該設計得儘可能簡單,簡單的函數才容易維護。應遵循以下原則:

  1. 實現一個函數只是為了做好一件事情,不要把函數設計成用途廣泛、面面俱到的,這樣的函數肯定會超長,而且往往不可重用,維護困難。

  2. 函數內部的縮進層次不宜過多,一般以少於4層為宜。如果縮進層次太多就說明設計得太複雜了,應考慮分割成更小的函數(Helper Function)來調用。

  3. 函數不要寫得太長,建議在24行的標準終端上不超過兩屏,太長會造成閲讀困難,如果一個函數超過兩屏就應該考慮分割函數了。[CodingStyle]中特別說明,如果一個函數在概念上是簡單的,只是長度很長,這倒沒關係。例如函數由一個大的switch組成,其中有非常多的case,這是可以的,因為各case分支互不影響,整個函數的複雜度只等於其中一個case的複雜度,這種情況很常見,例如TCP協議的狀態機實現。

  4. 執行函數就是執行一個動作,函數名通常應包含動詞,例如get_currentradix_tree_insert

  5. 比較重要的函數定義上側必須加註釋,說明此函數的功能、參數、返回值、錯誤碼等。

  6. 另一種度量函數複雜度的辦法是看有多少個局部變數,5到10個局部變數已經很多了,再多就很難維護了,應該考慮分割成多個函數。