歡迎您光臨本站 註冊首頁

函數要多小才夠好——談小函數之道

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

 來源:常高偉的博客

“設計良好的函數往往比較小,而過大函數的設計往往一塌糊塗,或者存在很大的優化空間。”

也許你認為討論函數的大小沒有必要,原因是函數設計的本質是內聚,它的大小隻是它的表現形式。而上面的原因有必要讓我們討論一下函數的大小問題。

我對函數的核心思路:我提出代碼最小處理單元的概念:一個基本操作(賦值,比較等),一個函數調用(包括調用后判斷返回值進行判斷)都看成一個最小處理單元。那麼,一個函數,最小處理單元合理的個數範圍在7以內。如果超過了7,你就要考慮把他們拆分成多個函數了(為什麼是7?人同時能夠處理的信息不超過7個)。

最小數目沒有限制,即便是只有1個,也有存在的必要。

在下面的情況下我會將函數拆分為更小的函數:

1、一眼不能夠看到函數所有的代碼。

如果函數過長,無法一眼看到一個函數所有的代碼,我會毫不猶豫的拆分。我不想讓讀者去翻屏,也不想讓讀者前顧后盼,顧此失彼。漂亮的函數應該讓讀者一眼就知道他在做什麼以及怎麼做的。

2、局部變數過多。

如果局部變數超過七個,我會考慮拆分函數。變數過多意味著我要記錄太多的狀態,這會加重我大腦的負擔,同時要考慮太多的東西。這也同時意味著我可能沒有對函數功能進行深入的思考。

3、太多的縮進。

太多的縮進意味著太多的嵌套,要麼是循環,要麼是判斷,都會導致複雜的邏輯。

4、如果你在使用ctrl+c和ctrl+v

那你寫的代碼不夠拽(DRY,Don’t Repeat Yourself)。這個時候,你要把你複製的部分拆分為新的函數。

5、不處於同一抽象層次。

舉例,有一個初始化函數,需要初始化配置數據,套接字,資料庫連接,通道狀態。

1
2
3
4
5
6
7
8
9
10
11
12
void init()
{
        Config_init();
        Socket_init();
        Db_init();
        int i = 0;
        For (i = 0;i < max_chn_num;i++)//初始化所有通道
        {
                G_user_chn[i].status = status_init;
                ……
         }
}

好文,頂一下
(2)
50%
文章真差,踩一下
(2)
50%
------分隔線----------------------------
  • 上一篇:如此理解面向對象編程
  • 下一篇:走進JVM,淺水也能捉魚
  • 我要評論!
  • 收藏
  • 挑錯
  • 推薦
  • 列印


把開源帶在你的身邊-精美linux小紀念品

[火星人 ] 函數要多小才夠好——談小函數之道已經有316次圍觀

http://coctec.com/docs/program/show-post-71309.html