函数要多小才够好——谈小函数之道

来源:常高伟的博客 作者:常高伟
  

 来源:常高伟的博客

“设计良好的函数往往比较小,而过大函数的设计往往一塌糊涂,或者存在很大的优化空间。”

也许你认为讨论函数的大小没有必要,原因是函数设计的本质是内聚,它的大小只是它的表现形式。而上面的原因有必要让我们讨论一下函数的大小问题。

函数要多小才够好——谈小函数之道

我对函数的核心思路:我提出代码最小处理单元的概念:一个基本操作(赋值,比较等),一个函数调用(包括调用后判断返回值进行判断)都看成一个最小处理单元。那么,一个函数,最小处理单元合理的个数范围在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;
                ……
         }
}

时间:2012-12-18 11:26 来源:常高伟的博客 作者:常高伟 原文链接

好文,顶一下
(2)
50%
文章真差,踩一下
(2)
50%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量