函数---代码整洁之道

函数—代码整洁之道

函数是一个程序中最小的功能单位,如何写好一个函数是至关重要的.

一.短小精悍,目标明确的函数

短小的函数

一个函数是一个完整的逻辑片段,如果一个函数承载了过多的功能,那么无论是后期的修改和阅读都会十分的困难.如果一个函数因为承担了过多的功能而无奈的太长.那么当你需要修改或者扩展的时候就会因为找不到对应的代码块而挠头抓耳.特别是你变量的命名也特别糟糕时候.所以一个优秀函数不应该超过二十行.

只做一件事

一个函数应该只做一件事,并且把它做好,这样的函数有两个显著的好处:

  • 代码在逻辑上十分清晰,在你阅读源码时可以轻松的找到你想看的代码片段,而不会晕头转向
  • 代码维护方便,进行扩展时你增添的代码就很难影响到其他的功能模块.

特别说明,异常处理也是一件事.

怎样使函数达到以上的目标

如果要将函数变得短小和功能明确,最重要的一点就是将代码进行抽象分级:例如在编译原理中的此法分析中,我们就可以对程序流程进行抽象分级如下. C语言的此法分析器(cpp实现)
在这里插入图片描述

其中,4个主流程就可以分为四个函数,这是第一层抽象级别.源代码过滤中又可以分为三个步骤函数,那么这三个步骤函数又是另一个抽象级别.

二.函数参数

一言蔽之,对于函数参数的个数而言,是越少越好,最好没有

想想看你被函数参数折磨的痛苦,如果一个函数,它含有多个参数,那么不可避免的你就要了解所有的参数的含义,如果某个参数和当前函数不处于相同的抽象层次,那么你就需要了解很多不需要了解的细节

别使用输出参数!!!

参数通常来讲是被自然的看成是函数的输入,如果你加了一个输出参数的话,想想阅读者需要花多少时间来明白这个参数的作用

别使用标识参数(布尔值)!!!

当你的函数需要传入布尔值的时候就说明所在函数抽象层次还不够高,可以进行进一步的优化.例如:

updateOrInsertUser(User user,bool flag).对于这样一个函数拆分成updateUser(),insertUser(),难道不会更好吗?

参数对象

当你的函数参数需要两个以上的时候,就可以把参数封装成对象,例如createCircle(double x,double y,double radius),很显然这是一个生成圆形的函数,但是三个参数显得太多了,因此我们可以将圆形的(x,y)坐标封装成一个对象CenterOfCircle.那么函数就变为了createCircle(CenterOfCIrcle centerOfCIrcle,double radius).不仅参数个数减少,而且函数也更加有利于阅读.

三.别重复自己

对于一个程序员而言,最耻辱的一件事恐怕就是在自己的代码中看到重复的代码段,那是低级和低能的表现,所以应该努力将重复的代码抽取出来,避免造重复的轮子,而且这样也可以使你的抽象能力和逻辑能力增强.

四.结构化编程

Edsger Dijkstra提出的结构化编程认为:每个函数、函数中的每个代码块都应该有且只有一个入口,一个出口.这意味着每个函数中一个只有一个return语句,不能有break 和 continue语句,而且永远永远不能有goto语句.

当然结构化编程对于代码量比较大的函数还是很好的作用,但是对于很小的函数作用则没有那么明显.

猜你喜欢

转载自blog.csdn.net/qq_44823898/article/details/108721650