表驱动法(Table-Driven Approach)

一个简单的小例子:

 

《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

 

你可能感兴趣的:(技术)