绝大多数程序都遵循一组简单的法则。
- 更多的时候,程序都是被阅读,而不是被编写。
- 没有“完工”一说。修改程序的投入都远大于最初编写程序的投入。
- 程序都由一组基本的语句和控制流概念组合而成。
- 程序的阅读者需要理解程序——即从细节上,也从概念上。有时候从细节开始,逐渐理解概念;有时候从概念开始,逐渐理解细节。
模式就是基于这样的共性之上的。比如说,每个程序员都必须决定如何进行迭代遍历。在思考如何写出循环的时候,大部分领域问题都被暂时抛在脑后了,留下的就是纯技术问题:这个循环应该容易读懂,容易编写,容易验证,容易修改,而且高效。
让你操心的这一系列事情,就是模式的起源。上面列出的这些约束,或者叫压力,会影响到程序中每个循环编写的方式。可以预见到,这样的压力会不断重现,这也正是模式之所以成为模式的原因:它其实是关于压力的模式。
有好几种合理的方式可以写出一个循环,它们分别暗含着对这些约束的不同的优先级排序:如果性能更重要,你可以用这种方式来写循环;如果容易修改更重要,你就可能用另一种方式来写循环。