第18章 表驱动法
Posted y=x^2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第18章 表驱动法相关的知识,希望对你有一定的参考价值。
第18章 表驱动法
18.1 表驱动法使用总则
使用表驱动法的两个问题
在使用表驱动法的时候,必须要解决两个问题。
- 首先,你必须要回答怎样从表中查询条目的问题。
下面是从表里面查询记录的方法列表:- 直接访问
- 索引访问
- 阶梯访问
- 在使用表驱动法的时候,需要解决的第二个问题是,你应该在表里面存此什么。
18.2 直接访问表
示例:一个月的天数
示例:保险费率
例子:灵活的消息格式
- 基于逻辑的方法
- 面向对象的方法
- 表驱动法
构造查询键值
你可以用几种不同的方法来构造这些键值
- 复制信息从而能够直接使用键值
- 转换键值以使其能够直接使用
- 把键值转换提取成独立的子程序
18.3 索引访问表
索引访问技术有两个主要优点:
- 首先,如果主查询表中的每一条记录都很大,那么创建一个浪费了很多空间的索引数组所用的空间,就要比创建一个浪费了很多空间的主查询表所用的空间小得多。
- 第二项优点是,即使你用了索引以后没有节省内存空间,操作位于索引中的记录有时也要比操作位于主表中的记录更廉价。
- 索引访问技术的最后一个优点就是表查询技术在可维护性上所具有的普遍优点。
18.4 阶梯访问表
下面是你在使用阶梯技术的时候需要注意的一些细节。
- 留心端点
- 考虑用二分查找取代顺序查找
- 考虑用索引访问来取代阶梯技术
- 把阶梯表查询操作提取成单独的子程序
18.5 表查询的其他示例
第19章 一般控制问题
19.1 布尔表达式
用true和false做布尔判断
- 隐式地比较布尔值与true和false
简化复杂的表达式
你可以采取多种办法来简化复杂的表达式
- 拆分复杂的判断并引入新的布尔变量
- 把复杂的表达式做成布尔函数
- 用决策表代替复杂的条件
编写肯定形式的布尔表达式
你可以采取一系列措施来避免把复杂否定形式的逻辑表达式引入到程序之中:
- 在if语句中,把判断条件从否定形式转换为肯定形式,并且互换if和else子句中的代码
- 用狄摩根定理简化否定的布尔判断
用括号使布尔表达式更清晰
- 用一种简单的计数技巧来使括号对称
- 把布尔表达式全括在括号里面
理解布尔表达式是如何求值的
按照数轴的顺序编写数值表达式
与0比较的指导原则
- 隐式地比较逻辑变量
- 把数和0相比较
- 在C中显式地比较字符和零终止符(‘\\0’)
- 把指针与NULL相比较
布尔表达式的常见问题
布尔表达式中还含有少量与特定语言相关的缺陷:
- 在C家庭语言中,应该把常量放在比较的左端
- 在C++中,可以考虑创建预处理宏来替换&&,||和==(不得已才这么做)
- 在Java中,应理解a==b和a.equals(b)之间的差异
19.2 复合语句(语句块)
- 把括号对一起写出
- 用括号来把条件表达清楚
19.3 空语句
- 小心使用空语句
- 为空语句创建一个DoNothing()预处理宏或者内联函数
- 考虑如果换用一个非空的循环体,是否会让代码更清晰
19.4 驯服危险的深层嵌套
- 通过重复检测条件中的某一部分来简化嵌套的if语句
- 用break块来简化嵌套if
这种技巧很不常见,所以只有在你的整个团队都很熟悉这种技巧,并且已经把它纳入了团队可接受的编码实践以后,才能使用。 - 把嵌套if转换成一组if-then-else语句
- 把嵌套if转换成case语句
- 把深层嵌套的代码抽取出来放进单独的子程序
- 使用一种面向对象的方法
- 重新设计深层嵌套的代码
对减少嵌套层次的技术的总结
19.5 编程基础:结构化编程
结构化编程的三个组成部分
- 顺序
- 选择
- 迭代
19.6 控制结构与复杂度
复杂度的重要性
降低复杂度的一般原则
- 如何度量复杂度
- 如果处理复杂度的度量结果
其他类型的复杂度
以上是关于第18章 表驱动法的主要内容,如果未能解决你的问题,请参考以下文章