好的子程序名字
- 描述子程序所做的所有事情。
- 避免使用无意义的,模糊或表述不清的动词。像 HandleCalculation(),PerformService(),OutputUser() 这样的子程序名字根本不能说明子程序是干嘛的。
- 不要仅通过数字来形成不同的子程序名字。
- 根据需要确定子程序名字的长度。变量的最佳长度是 9 到 15 个字符。子程序通常比变量更为复杂,因此好的子程序名字通常也会更长一些。
- 准确使用对仗词。
- 为常用操作确立命名规则。在某些系统里,区分不同类别的操作非常重要。而命名规则往往是指示这种区别的最简单也最可靠的方法。
子程序可以写多长
理论上认为子程序的最佳最大长度通常是一屏代码或打印出来一到两也得代码,也就是越 50 ~ 150 行。超过 200 行后,你迟早会在可读性方面遇到问题。
如何使用子程序参数
子程序之间的接口是程序最容易出错的部分之一。以下是可以减少接口错误的指导原则。
- 按照 输入 - 修改 - 输出 的顺序排列参数。这种排列方法暗含了子程序的内部操作所发生的顺序,先是输入数据,然后修改数据,最后输出结果。
- 如果几个子程序都用了类似的一些参数,应该让这些参数的排列顺序保持一致。
- 使用所有的参数。如果你不用它,就把它从子程序的接口中删去。
- 把状态或出错变量放在最后。
- 不要把子程序的参数用作工作变量。应该使用局部变量。
- 在接口中对参数的假定加以说明。
- 把子程序的参数个数限制在大约 7 个以内。如果你发现自己一直需要传递很多参数,这就说明子程序之间的耦合太过紧密了。应该重新设计这个或这组子程序,降低期间的耦合度。
- 考虑对参数采用某种表示输入,修改,输出的命名规则。如你可以给参数加上 i_, m_, o_ 前缀,或用 input_, modify_, output_ 当前缀。
- 为子程序传递用以维持其接口抽象的变量或对象。比如你有一个对象,它有 10 个数据,被调用的子程序只需要其中的 3 项数据就能进行操作。究竟是应该传递仅需的 3 项数据,还是直接传递整个对象?问题的关键之处在于:子程序的接口要表达何种抽象?如果要表达的抽象是子程序期望 3 项特定的数据,但这 3 项数据只是碰巧由同一个对象所提供,那就应该单独传递这 3 项数据。然而,如果子程序接口想表达的抽象是想一直拥有某个特定对象,且子程序要对这一对象执行这样那样的操作,如果仅传递 3 项数据的话,就是破坏了接口的抽象。
- 确保实参与形参相匹配。请养成好习惯,总要检查参数表中参数的类型,同事留意编译器给出的关于参数类型不匹配的警告。