一个简单的小例子:
《CodeComplete》中定义:从表里面查找信息而不使用if、else等逻辑语句的编程模式。
使用表驱动法,生成代码比复杂逻辑代码更简单更容易修改。
比如计算每个月中的天数的js(修改自《CodeComplete》中的VB代码):
switch(month){
case 1,3,5,7,8,10,12:
day=31;break;
case 4,6,9,11:
day=30;break;
case 2:
day=28;break;
}
使用表驱动法:
var days=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
day=days[month-1];
一:什么是表驱动法
所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值。我们平时查字典以及念初中时查《数学用表》找立方根就是典型的表驱动法。在数值不多的时候我们可以用逻辑语句(if 或case)的方法来获取值,但随着数值的增多逻辑语句就会越来越长,此时表驱动法的优势就显现出来了。
二:简单示例
在我几天前的一篇条码序列的文章中提到用36进制(A表示10,B表示11,...)来表示更大的数字,如果用逻辑来表示的话可能会写成:
if(i<10) {numChar=Convert.ToChar(i);}
else if (i==10) {numChar='A';}
else if (i==11) {numChar='B';}
else if (i==12) {numChar='C';}
...
else if (i==36) {numChar='Z;}
代码实在是太长了,按时髦的说法“代码臭味”太浓了。 但要是存在一个表的话,代码就非常简单了 C# code 使用表驱动法 numChar=numChars[i]; 这行代码假设已经建好了一个numChars的表,此时我们将数据存在一个表中而不是if判断中.
三:查表的方式
在使用表驱动法的时候必须要解决的一个问题就是如何查表. 我们可以用非常直接的方式查一个表,就如前面示例讲的我就用数组下标就好了,但你发现有谁查字典甚至《数学用表》是直接依靠页码来查的吗?这是肯定行不通的。常用的查表方式有
直接查询:是指无需绕圈子,用下标的方式就能顺利的获取到数据;
索引查询
分段查询
内容来自于:
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c4224604143ab6fd747f150fd1c67e6d1cfc090db0ab72252a0322b591d58a4fc0b890352f8c2633731a845612a44aee890c31847dd00ce6b869e4ad874484afa2c4ae5144be25120a84e7f82e1715ba7880112690ac&p=882a954181822dea0abcc771095d&user=baidu