三.函数
短小,只做一件事
每个函数一个抽象层级
1.要确保函数只做一件事,函数中的语句都要在同一抽象层级上
2.自顶向下读代码:向下规则,让代码拥有自顶向下的阅读顺序,让每个函数后面都跟着下一抽象层级的函数,这样一来,在看函数列表时,就能循抽象层级向下阅读了,我把这叫做向下规则
switch语句
1.尽量隐藏switch,不要暴露
使用描述性的名称
1.沃德原则:“如果每个例程都让你感到深合已意,那就是整洁代码”
2.函数越短小,功能越集中,就越便于取个好名字
3.别害怕长名称,长而具有描述性的名称,要比短而令人费解的名称好
4.命名方式要保持一致。使用与模块名一脉相承的短语、名词和动词给函数命名
函数参数
1.最理想的参数数量是零,有足够的理由才能用三个以上参数
2.事件:在这种形式中,有输入参数而无输出参数,程序将函数看作一个事件,使用该参数修改系统状态
3.对于转换,使用输出参数而非返回值令人迷惑,如果函数要对输入参数进行转换操作,转换结果就该体现为返回值
4.向函数传入布尔值会使方法签名立刻变得复杂起来,大声宣布函数不止做一件事
5.如果函数看来需要两个、三个或三个以上参数,就说明其中一些参数应该封装为类了
6.有可变参数的函数可能是一元、二元甚至三元,超过这个数量就可能要犯错了
7.对于一元函数,函数和参数应当形成一种非常良好的动词/名词对形式
无副作用
1.函数承诺只做一件事,但还是会做其他被藏起来的事,会导致古怪的时序性耦合及顺序依赖
2.参数多数会被自然而然地看作是函数的输入
分隔指令与询问
1.函数要么做什么事,要么回答什么事,但二者不可得兼
使用异步替代返回错误码
1.从指令式函数返回错误码轻微违反了指令与询问分隔的规则。它鼓励了在if语句判断中把指令当作表达式使用
2.try/catch代码块把错误处理与正常流程混为一谈,最好把try和catch代码块的主体部分抽离出来,另外形成函数
3.错误处理就是一件事,处理错误的函数不该做其他事
4.依赖磁铁(dependency magnet):其他许多类都得导入和使用它,如一些错误码枚举类
别重复自己
结构化编程
1.函数中的每个代码块都应该只有一个入口和一个出口
2.尽量少使用break,continue,不能用goto
如何写出这样的函数
1.打磨代码,分解函数、修改名称、消除重复
2.缩短和重新安置方法、拆散类、保持测试通过