第18章 表驱动法
18.1 表驱动法使用总则(General considerations in using table-driven methods)
表驱动法是一种编程模式(scheme),从表里面查找信息而不是使用逻辑语句(if和case)。事实上凡是能通过逻辑语句来选择的事物都可以通过查询表来选择。相比较逻辑语句,表驱动法更加简单,容易修改,而且效率高。
举例说明(伪代码):
假设你希望把字符划分为字母,标点符号,数字三类,如果使用逻辑语句实现:
if((input >='a' && input <= 'z') || input >='A' && input <= 'Z'){
charType = 字母;
}else if(input is '', ',' ,' .','!','-','(',')' ...etc){
charType = 符号;
}else if(input >= 0 && input <= 9){
charType = 数字;
}
如果要使用表查询法,则可以把每个字符的类型保存到一个用字符编码访问的数组里,类似一维数组:
字符数组索引 | 字符类型 |
---|---|
a | 字母 |
... | ... |
Z | 字母 |
, | 符号 |
... | ... |
/ | 符号 |
1 | 数字 |
... | ... |
9 | 数字 |
然后就会产生如下的查询:
charType = charTypeTable[inputChar]
表驱动法的两个问题(Two issues in using table-drvien methods)
使用表驱动法必须要解决两个问题:
- 怎样从表中查询条目;
- 直接访问(direct access)
- 索引访问(indexed access)
- 阶梯访问(Stair-step access)
- 你应该在表里存些什么;