- 函数要短。短才方便阅读、维护和设计。
- 函数只做一件事。依照单一职责原则(一个类只会因为一个原因改变)设计函数。一个函数要么进行流程控制或逻辑判断,要么改变某事物的状态,要么计算并返回结果,要么调用多个下一抽象级的其他函数(另一种流程控制而已)。不要有多余功能。
- 我们可以把函数分解成多个抽象层级来设计,在调用时最好只同时调用同一层级的函数,依照倒树状图来设计函数。个人认为类似于面向过程编程的思想。
- 函数不应该有作为标识的参数,这意味着函数有至少两种执行方式违反了第2条原则。
- 函数参数最多有两个,除非多个参数是作为一个整体传入的。如:坐标系的x,y,z作为一个整体。并且这种多个参数构成的整体最好能封装成类来传入。
- 函数真的最好只做一件事,不要在函数里为了方便当前调用加入其它功能。如web登录验证时,函数用来验证username和password,在验证之后顺便初始化session,这会导致除了登录时能调用验证函数,其它时候这函数没有任何作用或者强制刷新了session导致未知错误。
- 不要有输出参数,如果想改变某类的状态,就把该函数加入该类,让它自己调用函数。如:把改变类x的状态的函数调用addFooter(x),改为x.addFooter()。
- 函数不要返回错误码,这需要你有错误码的枚举类,并且违反了开放封闭原则(你需要加入新错误码来扩展新错误),直接抛出异常就好了。(可以通过继承父异常来扩展)
- 最好用函数名称就描述清楚函数作用,避免频繁去看函数文档,这对于短小的函数来说不难办到,如果很难命名可能需要思考函数是否有依照以上原则设计。并且名称的命名应该不容易与其他函数名称形成混淆。如:add()在calculator中意思是加,而在List中就不应该用add表示插入集合了,应该用insert或append。简单来说就是一个概念对应一个词,并且始终如一。
时间: 2024-10-06 11:09:03