《代码大全2》--读书笔记6
第16章 控制循环
使用带退出的循环,类似:
while True:
# do something
if some_condition:
break
# do something
1234567891011
把初始化代码紧放在循环前面。
一个循环只做一件事。如果用两个循环会导致效率地下,而使用一个循环很合适,那么就把代码写成两个循环,并注明可以把它们合并起来以提高效率,然后等测量数据显示程序的这一部分性能低下的时候再去合并它们。
避免出现依赖循环下标最终取值的代码。
小心那些有很多break散布其中的循环。一个循环包含很多的break,有可能意味着程序员对该循环的结构或者对循环本身的角色缺乏清晰的认识。在大量使用break的场合中,用一系列的循环而非一个含有多个出口的循环可能会使表达更清晰。
循环要尽可能短,嵌套限制在3层内。
第17章 不常见的控制结构
子程序中的多处返回(Multiple Returns):如果能增强可读性,那么就使用return。
小心谨慎地使用递归。
第18章 表驱动法
使用一目了然的表来代替复杂的逻辑判断。
第19章 一般控制问题
Tips:
-
编写肯定形式的布尔表达式
-
按照数轴的顺序编写数值表达式,例如
MIN_ELEMENTS <= i and i <= MAX_ELEMENTS
-
与0比较的指导原则:
-
隐式地比较逻辑变量
-
把数和0相比较,使用
while (balance != 0) ...
而不要使用while (balance) ...
-
在C语言中显式地比较字符和
\0
-
把指针与NULL相比较,使用
while (p != NULL) ...
而不要用while (p)
控制结构域复杂度密切相关。人类大脑很难处理好超过5到9个的智力实体。
1、布尔表达式(判断的条件)尽量可读,有助于提升代码的质量。
2、深层次的嵌套使得代码可读性降低,很少有人能理解超过3层的if嵌套,尽量避免使用超过3到4层的嵌套,可采用如下方法减少嵌套层次:
①重复判断一部分条件;
②转换成if-then-else;
③转换成case语句;
④把深层嵌套代码提取成单独的子程序;
⑤使用对象和多态。
3、衡量代码复杂度的方法,可以采用McCabe方法。
-