12

什么是“表驱动方法”?

正如比尔盖茨在第二个 Windows Vista 广告中 1:05 所述。

4

3 回答 3

21

表驱动方法是允许您在表中查找信息而不是使用逻辑语句(即 case、if)的方案。在简单的情况下,使用逻辑语句更快更容易,但是随着逻辑链变得越来越复杂,表驱动的代码比复杂的逻辑更简单,更容易修改,效率更高。

参考:麦康奈尔,史蒂夫。代码完成,第二版。雷德蒙德(华盛顿):微软,2004 年。印刷。第 411 页,第 1 段。

于 2008-09-19T20:32:22.693 回答
8

引用的视频中有比尔·盖茨阅读史蒂夫·麦康奈尔 (Steve McConnell) 的《代码完成》一书。Jeff Atwood 在他的博客中提到了这一点(YouTube 链接匹配)。

来自 Code Complete,第 2 版:

表驱动方法是一种允许您在表中查找信息而不是使用逻辑语句(ifcase)来找出它的方案。

McConnell 在他的示例中使用数组作为他的“表”,但我认为这个概念可以应用于数据库表或任何其他类似表的东西。

这个概念最好通过一个例子来解释。

假设您正在经营一家餐厅,并且每个桌号有不同数量的座位。

您获取特定桌子座位数的逻辑可能类似于

if table number == 1
    table has 4 seats
else if table number == 2
    table has 8 seats
. . .

因此,如果您有 50 张桌子,那么您将有 100 行代码来确定座位数。

使用表驱动方法,您可以创建一个数组,其索引表示表号,值表示座位数,因此您的逻辑看起来像

tables [] = {4, 8, 2, 4, ...}
table seats = tables[table number]

它更简单,更短,更容易维护。

于 2015-02-01T22:23:08.730 回答
4

表驱动方法非常简单。使用数据结构而不是 if-then 语句来驱动程序逻辑。例如,如果您正在处理两种类型的记录(电视与有线电视),您可以这样做:

hash[tv] = process_tv_records
hash[cable] = process_cable_records

在某些语言中,例如 Ruby 或 Perl,这种技术很简单。在 Java 中,您需要使用反射来查找方法句柄。

如果您想了解决策表,请查看http://fitnesse.org/上的 Fitnesse 测试框架。

于 2008-09-23T00:50:52.560 回答