1.短小
有时候我们会不知不觉就写了一段很长的代码,写的时候很清晰,等过了一段时间后,就会晕头转向。原因就是我们的函数在一个地方做了太多的事。我们应该尽量控制我们函数的行数和列数。一般来说,一个函数中的if,else,for,while等语句应该只包含一行代码,相当于将内容包装为一个函数,再调用这个函数。尽量保证函数的缩进层级不多于一层或两层。这样能使代码易于理解。
2.函数只需要做好一件事
这个理念我们应该都懂,但是有时候很难判断是不是做了一件事。一般来说我们可以通过看一个函数中是否还能拆分出一个函数,并且该函数不是单纯地重新诠释其实现。函数重新诠释就是指我们
定义一个函数去包含原来函数的一些步骤,直接调用新的函数就行。3.每个函数一个抽象层级
具体说来就是,每个函数执行的任务的抽象层级是相同的。比如,我们上班时刻去医院看病。主线任务是请假->坐车到医院->找医生看病。请假包含向leader申请,同意后写请假条,不同意就改天。
坐车到医院,包含查看地图路线,选择交通工具,如果坐公交就选择坐哪几路,如果自驾就要考虑堵车情况和到了之后的停车位。找医生看病,包含挂号,排队等待,看病,等结果。这里面就包含了很多层次。4.函数命名要有描述性,不怕长,绝对不能短到无法理解
5.函数参数不要多
最好一个参数,最多两个参数。参数多了,自己使用起来不好理解,容易导致混乱;同时对于测试也是麻烦,多个参数对于测试来说是噩梦,需要遍历所有可能的参数情况。
- 一个参数:单个参数,我们一般可能使用该参数做判断;或者对该参数做操作,然后将转换结果返回。
- 两、三个参数:两个、三个参数肯定没有一个参数清晰。在使用过程中,我们会遇到很多问题。两个参数的位置容易搞混;两个参数可能没有任何联系,对于参数理解有点困难。处理这个问题有很多方法,一是将多个参数构造为一个对象,这样我们每次只用传递一个对象,减少了参数个数;二是,将两个参数中的一个定义为成员变量,这样我们就可以直接使用,或者将方法定义在参数对象的类中;三是,使用变长参数列表。
- 函数名称中也可以掺入参数的名字,这样更好的理解函数的意图。例如:isAEqualsB(a, b)
6.函数中要分割指令和询问语句
例如:不要出现又判断又设置的操作。set(A,B)本来是设置A为B,如果里面加入了if判断A是否为空,这个方法就不纯洁了,需要将这两个操作分开。
7.函数处理错误要注意要使用异常,不使用错误码
使用错误码的确定是,我们必须在主代码中处理错误码,如果抛出异常,我们可以使用try/catch包裹主代码,处理异常,同时try/catch应该保证纯洁,不要包含太多的代码。
8.函数避免重复
重复是导致很多问题的根源,要学会整合抽象,提取相同部分,这样不仅使得代码不再臃肿,而且会利于后期的维护。
如何写好的函数?
谁都不是神,也没有达到下手就能按规范写出好代码的要求。如何写出好函数呢?1. 首先,要把功能实现,确保功能正确无误;
2. 之后,审查命名是否符合规范;
3. 再看函数入参是否符合规范,是否需要构造对象,修改结构;
4. 再看函数是否是否只做了一件事,如果函数做了很多事就需要分解函数,重新诠释函数;
5. 然后看函数中是否有和其他函数一样的步骤,如果有就可以抽取相同部分,消除重复。
6. 最后打磨完后,在严密测试,确保优化后函数功能正常。