什么时候才会创建一个函数呢?
如果问你这个问题你能答上来吗? 学习语言这么多年了,我语法都熟悉,会创建函数。但是问我什么情况下,需要创建一个函数。直接有点晕。
整理一下思路:我为什么写函数呢?
0 业务需要:不同的业务需要不同的操作,每个操作对应一个函数。如对一个系统可以读数据,也可以写数据。那么我会写两个不同的函数。
1 降低复杂度: 面对一个需求,我不可能在一个函数里面全部实现。否则,会有几十万行的函数吧。当业务之间的关系不大的时候能成为独立的一块的时候,为了降低复杂度,我会拆分成不同的函数。
2 抽象思考:面向过程的设计中,任务就是按照顺序执行的函数。如果我一个表达式一个表达式的写,那么我的思路会局限在在表达式层面,陷入细节无法自拔。如果我写函数来代替一段代码,我的思路会非常清楚,所以可以帮助我进行思考设计。
3 可读性:表达式是正儿八经的机器语言,计算机读的时候,一个字爽。但是我们人类是很痛苦的,程序员已经被计算机奴役,要在人类和计算机之间做翻译,人奸。但是函数是用自然语言命名的,多写函数,你的代码会非常清晰易懂。
3.1 要求函数必须短小:越短小的函数,越容易读懂。当然这里的短小不一定易懂,可以用圈复杂度来衡量函数内部是否复杂。同时如果有大量的短小函数,函数名字比较难以命名,而且会有大量的长函数名字
3.2 复杂表达式,可以用函数来代替。比如if(A>B && C>D && E<F ||A*C > B*F)直接替换成函数
4 消除重复代码:如果代码中很多重复,那么抽取成单独的函数。易读,易维护。
5 函数做到了隔离隐藏,因为它是独立的一块,同样类也有类似的好处。隔离使得两部分(调用者和被调用者)独立变化,隐藏函数内部实现,使得可以改变函数内部实现,而不改变函数功能。
6 单一职能原则:这个在设计类的时候,也有相同的原则。
7 语法需要:比如必须有main函数,所以必须至少要创建一个函数吧。
8 递归需要:完成递归,必须有函数
************************************************************************************************************************************
什么样子的函数是好的设计呢?
根据以上分析,很容易得到:
1 短小:不能超过50行,圈复杂度不要超过5.
2 越多越好:短小的一个直接结果
3 单一:一个函数功能越单一,越可能短小,越可能简单不复杂,越可能易读。
4 函数名字要好:易读啊
5 不要重复自己:有些函数相似度达到90%的,名字不好起,还难以维护。要拆分为不同的函数。