第18章 表驱动法(1)

  这本书讲什么?

code complete 是编码完成的意思,是一个软件项目开发过程中的重要里程碑(milestone)。软件项目进行到这里,表名已经完成了所有的编码工作,即将开始系统测试。
这本书讲的正是为了达到“编码完成”这一重要里程碑所必须的软件构建技术,确切的说,就是如何编写高质量的代码。作者认为,应该首先为人编写代码,其次才是为机器编写。代码主要是供人阅读的。遍布全书的提高代码质量的实实在在的技术和诀窍,是本书最有价值得部分。

  表驱动法是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if和else)。

18.1 表驱动法使用总则
  Genernal Considerations in Using Table-Driven Methods
  在适当的环境下,采用表驱动法,所生成的代码会比复杂逻辑代码更简单、更容易修改,而且效率更高。假设你希望把字符串划分成字母、标点符号和数字三类,那么你也许会用到下面这种复杂的逻辑链。


使用表驱动法存在的两个问题
  Two Issues in Using Table-Driven Methods。
  在使用表驱动法的时候,必须要解决两个问题。首先,你必须回答怎样从表中查询条目的问题。
  直接访问(Direct Access)
  索引访问(Indexed Access)
  阶梯访问(Stair-Step Access)
  第二个问题是:你应该在表里存些什么?

第18章 表驱动法(1)

时间: 2024-08-08 22:07:20

第18章 表驱动法(1)的相关文章

C++的表驱动法

目的:使用表驱动法,替换复杂的if/else和switch/case语句. 说明:JS 等其他语言也都支持的.表驱动发示例:http://blog.csdn.net/zhouyulu/article/details/6860907 参考资料 1. <代码大全>(第2版)中文版,第18章 表驱动法.

《Code Complete》ch.18 表驱动法

是什么 一种scheme,用表来做信息存取,代替逻辑语句(if/else) 为什么 简化逻辑语句,避免大量嵌套的 if/else 或者 switch/case 怎么用 三种访问表的方式 直接访问:将源数据作为key 索引访问:构建KV表 阶梯访问:分为连续区间,遍历或者二分查找 例子 // get the full name of weekday // good String[] weekdays = { "Sunday", "Monday", "Tues

《Cracking the Coding Interview》——第18章:难题——题目13

2014-04-29 04:40 题目:给定一个字母组成的矩阵,和一个包含一堆单词的词典.请从矩阵中找出一个最大的子矩阵,使得从左到右每一行,从上到下每一列组成的单词都包含在词典中. 解法:O(n^3)级别的时间和空间进行动态规划.这道题目和第17章的最后一题很像,由于这题的时间复杂度实在是高,我动手写了字典树进行加速.如果单纯用哈希表来作为词典,查询效率实际会达到O(n)级别,导致最终的算法复杂度为O(n^4).用字典树则可以加速到O(n^3),因为对于一个字符串"abcd",只需要

表驱动法——直接访问表示例1

<代码大全>看到"表驱动法"一章,以下是表驱动法的第一个方法--直接访问表 import java.util.Scanner; import java.util.Calendar; class DaysPerMonth { public static void main(String[] args) { System.out.println("输入年份:"); Scanner scan = new Scanner(System.in); String i

敏捷软件开发:原则、模式与实践——第16章 对象图、第17章 用例、第18章 顺序图

第16章 对象图 有时,呈现出系统在某个特定时刻的状态是非常有用的.和一个正在运行系统的快照类似.UML对象图展示了在一个给定时刻获取到的对象.关系和属性值. 不过,你应该对花太多的对象图保持警惕.在大部分的情况下,它们都可以从相应的类图中直接推导出来,因此没有多少用处. 第17章 用例 在所有的UML图中,用例图是最令人迷惑也是最没有用处的.我建议出来系统边界外,忽略掉所有其他的图.系统边界图示例如下: 大矩形是系统边界.矩形内的所有东西都是将要开发的系统的组成部分.矩形外面是操作系统的参与者

表驱动法3

需求:编写一个子程序,打印存储在一份文件中的消息.该文件有500条消息,有20种不同类型的消息. 思路:将消息逐条读入,然后,解释该消息,看它是属于哪种类型的,然后,调用针对该类型的打印程序.如此,实现方式,有:1.要写20个if语句,来判断该消息是属于哪种类型: 然后,还需要20个打印子程序.当然,还可以采用继承的方式,写一个抽象类,该抽象类抽象了20种不同类型的消息特征,然后,具体的消息类型是该抽象类的一个子类:但是, 同样要判断该消息类型,同样是要有20个if语句,然后,再实例化相应的子类

表驱动法2

继续展示使用表驱动法实现的例子. 例子1: 需求:输入一个月份,和一个年份,输出该月的天数. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 public class DaysPerMonth {     private in

一则表驱动法的应用实例

1 需求场景 考虑如下需求场景: 终端按固定时间间隔(单位为分钟)生成诊断日志(格式为UserName-Status-yyyy-mm-dd-hh-mm.log),并上传至服务器.若终端与服务器的传输通道中断,则终端本地暂存最新的N个日志文件,即第(N+1)个周期生成的新日志将覆盖第1个周期的旧日志,以此类推.待传输恢复后,终端一次性上传该N个日志. 本文主要讨论该需求中"最新日志覆盖最旧日志"的功能点.为突出层次,文中"覆盖"用先删除旧日志后创建新日志实现.实际中先

MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出现异常的可能,监控系统就是根据系统的各项状态的分析,让我们能够尽可能多的提前预知系统可能会出现的异常状况.即使没有及时发现将要发生的异常,也要在异常出现后的第一时间知道系统已经出现异常,否则之前的设计工作很可能就白费了. 18.1 监控系统设计 系统监控