布尔表达式
- 用
ture
和false
做布尔判断;- 隐式地比较布尔值与
true
和false
;
- 隐式地比较布尔值与
- 简化复杂的表达式;
- 拆分复杂的判断并引入新的布尔变量;
- 把复杂的表达式做成布尔函数;
- 用决策代替复杂的条件;
- 编写肯定性质的布尔表达式;
- 在
if
语句中,把判断条件从否定形式转换为肯定形式,并且互换if
和else
子句中的代码; - 用狄摩根定理简化否定的布尔判断;
- 在
- 用括号使布尔表达式更清晰;
- 用一种简单的计数技巧来世括号对称;
- 理解布尔表达式是如何求值的;
- 按照数轴的顺序编写数值表达式;
- 与0比较的指导原则;
- 隐式地比较逻辑变量;
- 把数和0相比较;
- 在C中显式地比较字符和零终止符(`\0`);
- 把指针与
NULL
相比较;
- 布尔表达式常见问题;
- 在C家族语言中,应该把常量放在比较的左端;
- 在C++中,可以考虑创建预处理宏来替换&&,||和==;
复合语句(语句块)
复合语句指的是一组语句,该组语句被视为一条单一的语句,用于控制程序流。符合语句使用指导原则:
- 把括号对一起写出;
- 用括号来把条件表达清楚。
空语句
空语句即一条仅含分号的语句。
- 小心使用空语句;
- 为空语句创建一个
DoNothing()
预处理宏或者内联函数; - 考虑如果换用一个非空的循环体,是否会让代码更清晰。
驯服危险的深层嵌套
深层嵌套与软件首要技术使命——管理复杂度——是相违背的。
- 通过重复检测条件中的某一部分来简化嵌套的
if
语句; - 用
break
块来简化嵌套if
; - 把嵌套
if
转换成一组if else
语句; - 把嵌套
if
转换成case
语句; - 把深层嵌套的代码抽取出来放进单独的子程序;
- 使用一种更面向对象的方法;
- 重新设计深层嵌套的代码。
编程基础:结构化编程
结构化编程的核心思想是一个用用程序应该只采用一些单入单出的控制结构。
结构化编程的三个组成部分
- 顺序;
- 选择;
- 迭代。
控制结构与复杂度
程序复杂度的一个衡量标准是,为理解应用程序,你必须在同一时间记住智力实体的数量。
降低复杂度的一般原则
通过做一些脑力联系来提高你自身的脑力游戏水平;降低你的应用程序的复杂度。
- 如何度量复杂度
- 通过计算子程序中决策点的数量来衡量复杂度;
核对表:控制结构相关事宜
- [ ] 表达式中用的是
true
和false
,而不是0和1吗? - [ ] 布尔值和
true
以及false
做比较是隐式进行的吗? - [ ] 对数值做比较是显示进行的吗?
- [ ] 有没有通过增加新的布尔变量、使用布尔函数和决策表来简化表达式?
- [ ] 布尔表达式是用肯定形式表达的吗?
- [ ] 括号配对吗?
- [ ] 在需要用括号来明确的地方都使用了括号吗?
- [ ] 判断是按照数轴顺序编写的吗?
- [ ] 如果适当的话,Java中的判断的是
a.quals(b)
方式,而没有用a==b
方式吗? - [ ] 空语句表述得明显吗?
- [ ] 用重新判断部分条件、转换成
if else
或者case
语句、把嵌套代码提取成单独的子程序、换用一种更面向对象的设计或者其他的改进方法来简化嵌套语句了吗? - [ ] 如果一个子程序的决策点超过10个,那么能提出不重新设计的理由吗?
要点
- 使布尔表达式简单可读,将非常有助于提高你的代码质量;
- 深层次的嵌套使得子程序变得难以理解;
- 结构化编程是一种简单并且仍然适用的思想:你可以通过把顺序、选择和循环三者组合起来而开发出任何程序;
- 将复杂度降低到最低水平使编写高质量代码的关键。