代码大全 18 19章

“程序复杂度”的一个衡量标准是:为了理解应用程序,你必须在同一时间记住的智力实体的数量。这种智力游戏可以说是编程中最难的方面之一,这也使编程需要比其他任何活动都需要专心。它也是程序员对“不时被打断”特别反感的原因。

计算机科学界的研究人员对复杂度重要性的关注至少已经有20年时间了,多年以前,Edsger Dijkstra已经就复杂的危险提出警告:“有能力的程序员会充分认识到自己的大脑容量是多么地有限;所以,他会非常谦卑地处理编程任务”(Dijkstra 1972)。这并不是说你必须得增加自己的脑容量才能应对巨大的复杂度,而是说,你永远也不可能有能力应对如此巨大的复杂度,因此只能尽可能地采取措施来降低复杂度。

把子程序的一部分提取成另一个子程序,不会降低整个程序的复杂度,只是把决策点移到其他地方。但是这样做可以降低你在同一时间必须关注的复杂度水平。由于重点是要降低你需要在头脑中同时考虑的项目的数量,所以降低一个给定了程序的复杂度是有价值的。 10个决策点的上限并不是绝对的。应该把决策点的数量当作一个警示,该警示说明某个子程序可能需要重新设计了。不要死守这个规则。一条情况很多的case 语句可能会包含超过10个的元素。如果硬拆开它可能就是很愚蠢的,这取决于该case语句的用途。



研究表明,很少有人能够理解超过三层的if嵌套,很多研究人员建议避免使用超过3到4层的嵌套。

避免深层样套并不太难。如果你写出了深层的嵌套,那么可以重新设计if和else子句中执行的判断,或者把代码重构为更简单的子程序。



隐式地布尔值与true和false
把表达式当做布尔表达式,可以写出更清晰的判断语句。
例如,写成
while ( not done ) ...
while ( a > b ) ...
而不要写成
while ( done == false ) ...
while ( (a > b) = true ) ...
通过使用隐式比较,能减少阅读你的代码的人必须要记住的项(term)数,这样写出的表达式读起来也更像英语中的对话。

你可能感兴趣的:(代码大全 18 19章)