`

表驱动法

阅读更多

1:什么是表驱动法.
     表驱动法是一种编程模式(Scheme),从表里面查找信息而不使用逻辑语句(if 和case)它的好处是消除代码里面到处出现的if、else、swith语句,让凌乱代码变得简明和清晰。对简单情况而言,表驱动方法可能仅仅使逻辑语句更容易和直白,但随着逻辑的越来越复杂,表驱动法就愈发有吸引力。
2:表驱动法的例子演示
    假设有段程序要计算某年某月的天数
    通常的做法如下:

 

private void btnCalculate_Click(object sender, EventArgs e)
        {
            //检测输入是否正确
            if (!CheckInput()) return;
          
            int days = 0 ;

            int month = Convert.ToInt16(txbMoth.Text);

            switch (month)
            {
              case 1:
                  days = 31;
                  break;
              case 2:
                  if (IsLeapYear(txbYear.Text))
                  {
                      days = 29;
                  }
                  else
                  {
                      days = 28;
                  }
                  break;
              case 3:
                  days = 31;
                  break;
                 case 4:
                  days = 30;
                  .....
                  .....
              case 11:
                  days = 30;
                  break;
              case 12:
                  days = 31;
                  break;
              default:
                  break;
            }
           txbOutPut.Text = days.ToString();                   
       }

大家可能会看到这里会出现大量的switch、case语句,其实这只是个简单的逻辑,如果在业务逻辑复杂的情况下,代码里
这些if 、else,switch,case语句必将是铺天盖地的出现。好了,我们来看看,表驱动的方法的简单应用吧
 private void btnCalculate_Click(object sender, EventArgs e)
        {
            if (!CheckInput()) return;

       
            int[] dayPerMonth = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            int[] ldayPerMonth = new int[12] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

            int days = 0;
            int index = Convert.ToInt16(txbMoth.Text);

            if (IsLeapYear(txbYear.Text))
            {
                days = ldayPerMonth[index];
            }
            else
            {
                days = dayPerMonth[index];
            }

            txbOutPut.Text = days.ToString();
          
         
        }

对比这两段代码,你会发现如果用表驱动法,你的代码将会更简洁,明了。
3:表驱动法查询数据的方式

    * 直接访问(Direct Access)
    * 索引访问(Index Access)
    * 阶梯访问(Stair-Step Access)
    有时需要进行变址查询

4:表驱动法优点
     前面一直在强调表驱动法的优点,下面我们来总结一下:

    * 在适当环境下,使用它能够使代码简单、明了。
    * 修改容易(易维护)、效率更高。
    * 表驱动法的一个好处就是能够大量消除代码中if else, swith 判断。

分享到:
评论

相关推荐

    基于表驱动法的三种实现方法

    表驱动法分为直接访问,索引访问,阶梯访问三种方式,分别对应相应代码,代码里有详细注释

    CRC.rar_表驱动法

    表驱动法是实现CRC计算的一种高效策略,特别是在嵌入式系统和微控制器环境中,如Keil开发环境。 CRC32和CRC16是两种不同的CRC校验标准,分别产生32位和16位的校验码。CRC32通常用于更高级别的错误检测,如Ethernet...

    用表驱动法输出信息至结构体中,省略过多的输出语句、假设语句和集成语句。

    用表驱动法从列表中提取各主要颜色的RGB值,经相应的函数处理后,输出至文件中。

    深入数据驱动编程之表驱动法的详解

    ### 数据驱动编程之表驱动法详解 #### 一、引言 随着软件开发技术的不断发展,数据驱动编程作为一种有效的编程模式被广泛应用于各种场景中。其中,“表驱动法”作为数据驱动编程的一种重要实践手段,因其高效灵活的...

    C Minus Compiler 表驱动方式词法分析

    然后,状态转换表是表驱动法的核心。它是一个二维数组,通常包含两列:一列是输入字符集,另一列是状态转移信息。当词法分析器在某个状态时读到特定字符,它会查看状态转换表,根据当前状态和字符找到新的状态。表中...

    驱动魔法师-亲测能用-比驱动精灵功能强

    驱动魔法师是一款专业的驱动备份、恢复工具,相较于常见的驱动精灵,它在某些方面具有更强大的功能。本文将深入探讨驱动魔法师的主要特点、优势以及如何使用它来管理计算机的硬件驱动程序。 驱动魔法师的主要功能:...

    表驱动LL(1)语法分析程序

    在编译原理中,表驱动LL(1)语法分析程序是一种用于解析源代码的有效方法。它的核心思想是通过构建预测分析表,根据当前输入符号和栈顶符号来决定下一步的解析动作。这个课程设计旨在让学生理解和实现这一解析技术,...

    基于任务驱动法的计算机教学策略探索.pdf

    ### 基于任务驱动法的计算机教学策略探索 #### 一、引言 随着信息技术的迅速发展,计算机教育已成为教育领域不可或缺的一部分。然而,传统的计算机教学方式往往以教师为中心,忽视了学生的主体地位,这导致学生的...

    表驱动LL(1)语法分析程序.docx

    设计一个表驱动的LL(1)语法分析程序旨在深化对预测分析法的理解,掌握如何构建和使用预测分析表。这一过程不仅锻炼了编程能力,也强化了对编译原理中语法分析部分理论知识的应用。 1.2 主要完成的任务 任务包括: ...

    驱动魔法师网络绿色版

    驱动魔法师免安装版 出自猪猪猫驱动魔法师网络版

    任务驱动法在小学体育的实施.doc

    【任务驱动法在小学体育的实施】 任务驱动法是一种教育理念,强调以具体的任务或问题为导向,引导学生主动参与、自主探索和合作学习。在小学体育教学中实施任务驱动法,能够激发学生的学习兴趣,提高他们的体育技能...

    驱动魔法师网卡网络标准版

    原有驱动魔法师网络标准版的基础上,添加了网卡快速安装专版,主要是为了解决新装机用户在网卡未安装的时候无法联网下载安装驱动的问题,先运行网卡专版安装您的网卡,可以联网后再运行驱动魔法师网络版联网下载驱动...

    法高Fagoo P360E证卡打印机驱动程序Fagoo_P360e-Driver_v2.1.0.9.zip

    总的来说,法高Fagoo P360E证卡打印机驱动程序Fagoo_P360e-Driver_v2.1.0.9.zip是保证设备高效运行的关键组件,包含了安装程序和更新日志,为用户提供了一个便捷的途径来管理和优化他们的证卡打印解决方案。

    Table Driven Methods

    表驱动法的核心是创建一个数据表,其中包含了所有可能的输入条件和对应的输出结果。在运行时,程序通过查询这个表来决定执行哪个操作,而不是使用嵌套的条件语句。这样可以使得代码更加模块化,减少代码重复,并...

    探究CRC32算法实现原理-why table-driven implemention.txt

    通过使用表驱动法,CRC32能够高效地完成校验值的计算,不仅确保了数据的完整性,同时也满足了现代高速数据传输的需求。了解CRC32的原理及其高效实现方法,对于从事通信技术、数据存储等相关领域的专业人士而言,具有...

    黑盒测试用例设计(全面)

    本文将对黑盒测试用例设计方法进行详细的介绍,包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等七种方法。 一、等价类划分法 等价类划分法是一种常用的黑盒测试...

    驱动魔法师全自动驱动安装光盘1·2版ForWIN2000XP2003VISTA

    驱动魔法师全自动驱动安装光盘1·2版ForWIN2000XP2003VISTA

    任务驱动法在高职跨境电商课程中的运用.pdf

    任务驱动法是一种以完成特定任务为中心的教学方法,它强调将理论知识与实践活动相结合,通过真实任务的设置、分析和完成,让学生在实践中学习并巩固理论知识,提升实践能力。在高职跨境电商课程中运用任务驱动法,...

    长学号-姓名-09周 黑盒测试-实验(训)报告书2.doc

    实验报告主要涵盖了两种黑盒测试方法——判定表驱动法和因果图法,用于设计测试用例来验证软件功能的正确性。以下是对这两种方法的详细解释: **判定表驱动法**: 这是一种系统化的方法,用于处理具有多个输入条件...

    DriverMagicianSetup驱动魔法师最新网络版

    驱动魔法师是一款专业的驱动备份、恢复、安装工具,尤其在应对电脑重装系统或者硬件更换时,能极大地提高工作效率。这款“DriverMagicianSetup驱动魔法师最新网络版”是专为那些在网络连接不稳定或无网络环境下的...

Global site tag (gtag.js) - Google Analytics