表驱动法是一种编程模式——从表里查找信息而不是使用逻辑语句(if 和 case)。事实上,凡是能通过逻辑语句来选择的事务,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑链的越来越复杂,查表法也就愈发显得更具吸引力。
表驱动法使用总则
例子一:
使用复杂的逻辑对字符分类
if((('a' <= inputChar) && (inputChar <= 'z')) ||
(('A' <= inputChar) && (inputChar <= 'Z‘))){
charType = CharacterType.Letter;
}else if ((inputChar == ' ') || (inputChar == ',') || (inputChar == '.') || (inputChar == '!') || (inputChar == '(') || (inputChar == ')') || (inputChar == ':') || (inputChar == ';') || (inputChar == '?') || (inputChar == '-')) {
charType = CharacterType.Punctuation;
} else if (('0' <= inputChar) && (inputChar <= '9')){
charType = CharacterType.Digit;
}
使用一个查询表,就可以把每个字符的类型保存在一个用字符编码访问的数组里,那么上述代码可以替换为:
charType = charTypeTable[ inputChar ];
使用表驱动法,必须要解决两个问题。
1,怎样从表中查询条目。 比如你希望把数据按月进行分类,那么创建一个月份表是非常直截了当的,你可以用一个下标从 1 到 12 的数组实现它。而另一些数据可能很难直接用于查表。
2,你应该在表里存些什么。有
时候,表查询出来的结果是数据,有时候,表查询出来的结果是动作,或者有时候,查出来的是子程序的引用。无论何种情况,表都会变得更为复杂。