《Code Complete》ch.7 高质量的子程序

WHAT?

  子程序(routines)是为实现一个特定目的而编写的可被调用的方法或过程。在C++中是函数(function),在Java中是方法(method),在VB中是函数过程(function procedure)或子过程(sub procedure)。

WHY?

  • 降低复杂度
  • 引入中间、易懂的抽象
  • 避免代码重复
  • 支持继承、重写
  • 隐藏实现细节
  • 提高可移植性
  • 改善性能(对明确的子程序进行优化)

HOW?

  • 内聚性(cohesion):是指子程序中各种操作之间联系的紧密程度
  • 编程的目标是让每一个子程序只完成一件事情
  • 内聚性的几个层次,由高到低排列
    • 功能内聚(functional cohesion):最强、最好的内聚,只完成一件事情
    • 顺序内聚(sequential cohesion):子程序做了至少两件事情,且这两件事情有分先后顺序
    • 通信内聚(communicational cohesion):子程序做了至少两件事情,它们使用了同样的数据
    • 临时内聚(temporal cohesion):将一系列操作放到一起执行,如startUp()、shutDown(),应该由这些程序去调动其它子程序,而不是把实现都写在这些程序中
    • bad:过程内聚(procedural cohesion):子程序中操作必须按照特定顺序进行
    • bad:逻辑内聚(logical cohesion):依靠输入参数的标识位来决定执行哪一段逻辑
    • bad:巧合内聚(coincidental cohesion):子程序中各个操作没有关联,一团乱麻
  • 好的子程序名字
    • 描述子程序所做的所有事情
    • 避免使用无意义的、含混不清的动词
      • bad:handleCalculation
    • 不要仅通过数字形成不同的子程序名字
      • bad:test1、test2
    • 函数命名:对返回值有所描述
    • 过程命名:动宾短语
    • 如果子程序的名字很糟糕,但却正确滴描述了子程序的功能——到了考虑修改子程序的时候了
  • 子程序不要超过200行
  • 参数排列
    • (输入、修改、输出),把状态或者出错变量放在最后
    • 多个相似的子程序,使用相同的参数顺序
    • 不要把参数用作工作变量
    • 参数个数在7个以内
    • 想清楚子程序需要的参数是一整个对象,还是仅仅为对象中几个独立的field
原文地址:https://www.cnblogs.com/maozhige/p/3784578.html