加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2018-04-22 17:44:51 所属栏目:编程 来源:常高伟的博客
导读:计划精采的函数每每较量小,而过大函数的计划每每一塌糊涂,可能存在很大的优化空间。 大概你以为接头函数的巨细没有须要,缘故起因是函数计划的本质是内聚,它的巨细只是它的示意情势。而上面的缘故起因有须要让我们接头一下函数的巨细题目。 我对函数的焦点思绪

“计划精采的函数每每较量小,而过大函数的计划每每一塌糊涂,可能存在很大的优化空间。”

大概你以为接头函数的巨细没有须要,缘故起因是函数计划的本质是内聚,它的巨细只是它的示意情势。而上面的缘故起因有须要让我们接头一下函数的巨细题目。

我对函数的焦点思绪:我提出代码最小处理赏罚单位的观念:一个根基操纵(赋值,较量等),一个函数挪用(包罗挪用后判定返回值举办判定)都当作一个最小处理赏罚单位。那么,一个函数,最小处理赏罚单位公道的个数范畴在7以内。假如高出了7,你就要思量把他们拆分成多个函数了(为什么是7?人同时可以或许处理赏罚的信息不高出7个)。

最小数量没有限定,即即是只有1个,也有存在的须要。

在下面的环境下我会将函数拆分为更小的函数:

1、一眼不可以或许看到函数全部的代码。

假如函数过长,无法一眼看到一个函数全部的代码,我会绝不踌躇的拆分。我不想让读者去翻屏,也不想让读者前顾后盼,左支右绌。大度的函数应该让读者一眼就知道他在做什么以及怎么做的。

2、局部变量过多。

假如局部变量高出七个,我会思量拆分函数。变量过多意味着我要记录太多的状态,这会加重我大脑的承担,同时要思量太多的对象。这也同时意味着我也许没有对函数成果举办深入的思索。

3、太多的缩进。

太多的缩进意味着太多的嵌套,要么是轮回,要么是判定,城市导致伟大的逻辑。

4、假如你在行使ctrl+c和ctrl+v

那你写的代码不足拽(DRY,Don’t Repeat Yourself)。这个时辰,你要把你复制的部门拆分为新的函数。

5、不处于统一抽象条理。

举例,有一个初始化函数,必要初始化设置数据,套接字,数据库毗连,通道状态。

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;

……

}

}

上个函数中对全部通道的初始化一块代码就和其他的不处于一个抽象条理,我们应该将它封装起来:

void chn_init()

{

int i = 0;

for (i = 0;i < max_chn_num;i++)//初始化全部通道 {

G_user_chn[i].status =status_init;

……

}

}

函数最小可以有多小,它存在的意义

我见过的最优越的函数:

int max(int a, intb)

{

return a> b?a:b;

}

这个函数很小,只有一行,可是他存在的意义在于:在函数的挪用点,我们一眼就知道是获取a和b中的最大值,而不是说明a > b?a:b的逻辑。这样可以节减措施员的脑力本钱,从而到达一个目标:大度的函数应该让读者一眼就知道他在做什么以及怎么做的。

小函数的最大障碍:机能

对付措施员新手,小函数的最大障碍在于没有履历领会不到小函数的上风,没有履历拆分大函数为更小的函数。

对付有必然履历的措施员,小函数的最大障碍大概是对机能的郁闷。

对付机能,牢记,不要过早优化。我们一样平常以为的措施的瓶颈,一样平常并不是措施的瓶颈:我们必要器材来确定真正的瓶颈地址,20%的代码淹灭了80%的机能,优化之前起主要找到那20%的代码。函数挪用会发生资源和机能的消费,可是这是不是措施的机能瓶颈?耗损的机能占总体的机能百分比为几多?这统统在代码编写时并不清晰,以是,我的概念是情愿选择简短的函数来得到清楚简朴的计划,以便在项目后期可以或许更快,更好的举办机能优化。

许多人都在质疑我上面罗列的max函数的实例,假如说他在运行时代挪用次数不大,则对机能的影响根基可以忽略,而得到的可读性,清楚性这极具代价;反过来,假如他的挪用次数是否复杂,甚至成为了机能的瓶颈,则完全可以在措施编写完成后,很快的用其他的要领优化。措施的瓶颈不会许多。

关于函数挪用发生的机能耗损,我会抽时刻测试一下,看到底占用几多。

最后的提议:

在对新员工培训的进程中,发明措施员新手一样平常对函数的巨细不足敏感。以是,我提议你可以多实行编写10行阁下(乃至更小)的函数,逐步你会发明小函数原本具有大威力。

文章来历:常高伟的博客

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读