编写函数的规范
沃德原则:如果每个历程都让你感到深和己意,那就是整洁的代码
基本规范
- (最为重要的一点)函数体尽可能短小尽可能短小
- 一个函数只做一件事,并做好这件事。要判断函数是否只做了一件事,有一个办法是看在你编的函数里,你能否再拆出一个函数
- 将switch埋藏在较低的抽象层级。
函数参数
- 参数名,最好和函数名有联系。这样可以,大大减轻记忆参数的负担
- 禁止把布尔值传入函数。因为这样做,意味着,宣称本函数不只做一件事:ture时做一件事,false时则在做另外一件事。
- 函数参数的个数尽可能少!最理想的参数数量是零。这个规则,使得用函数更简单,还使得测试函数得到了方便,因为输入的参数少了,困难麻烦就少了。
- 多元函数中,函数参数尽量是单个值的有序组成部份,或者多个有序的值,有序性是很重要的,如果函数参数之间无序,你无法很快知道某个参数的作用。
- 如果参数有多个的话,可能需要将参数封装成对象。
- 应该避免使用输出参数,当某个函数必须要修改某个变量的时候,还不如修改所属对象的状态。这样以来我们可以通过对象来分析参数的意义,而仅仅通过某个变量所获取的会不足。比如changeGrade(grade)来调用显然没有student.changeGrade()舒服。
函数的抽象层(重点)
- 函数的抽象层级以功能来划分,比如去买书,抽象层级:买书>去书店>走路
- 函数的抽象层级的最高层类似于人类自然语言,使代码清晰易懂,简洁。
- 确保,每个函数,一个抽象层级,也就是说一个函数中的语句都要在同一抽象层级上。
- 我们想要让代码拥有自顶向下的阅读顺序,因此让每个函数后面都跟着下一抽象层级的函数,此举方便了以后修改代码和阅读代码。
函数编写细则
- 不要重复自己,重复的代码难以修复,且可读性差,应该把重复的代码写成函数。
- 函数应该只做一件事,当做了多件事的时候就很容易产生副作用。
- 在对函数测试的时候,函数应该剔除所有副作用。
- 函数要么“做什么事”,要么“回答什么事”。即是将指令和询问分隔开来。
- 抽离try/catch代码块,他们会搞乱了代码结构,把错误处理正常流程混为一谈。所以应该把其主体部分抽离出来,另外写成函数。错误处理的代码应该就是包含它的函数的所有代码。
结语
- 好的函数并不是一开始就能写出来,而是通过分解函数、修改名称、消除重复反复打磨而成。我们相信没人能做到,一开始就能写出符合这所有的规则的函数。