「テーブルドリブン方式」とは?
ビルゲイツが2番目のWindowsVistaコマーシャルで1:05に述べたように。
テーブル駆動型メソッドは、論理ステートメントを使用するのではなく、テーブル内の情報を検索できるようにするスキームです(つまり、ifの場合)。単純なケースでは、ロジックステートメントを使用する方が速くて簡単ですが、ロジックチェーンが複雑になるにつれて、テーブル駆動型コードは複雑なロジックよりも単純になり、変更が容易になり、効率が向上します。
参照:マコネル、スティーブ。コードコンプリート、第2版。レドモンド(ワシントン):マイクロソフト、2004年。印刷。ページ411、パラグラフ1。
参照されているビデオでは、Steve McConnell の本 Code Complete から Bill Gates が読んでいます。Jeff Atwood は彼のブログでこれについて言及しました (YouTube のリンクが一致します)。
コードコンプリート、第2版から:
テーブル駆動型メソッドは、論理ステートメント ( ifおよびcase ) を使用して情報を把握するのではなく、テーブル内の情報を検索できるスキームです。
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]
これは、よりシンプルで、短く、維持しやすいものです。
テーブル駆動型の方法は非常に簡単です。プログラムロジックを駆動するには、if-thenステートメントの代わりにデータ構造を使用します。たとえば、2種類のレコード(テレビとケーブル)を処理している場合は、次のようにします。
hash[tv] = process_tv_records
hash[cable] = process_cable_records
RubyやPerlなどの一部の言語では、この手法は簡単です。Javaでは、Reflectionを使用してメソッドハンドルを見つける必要があります。
デシジョンテーブルについて知りたい場合は、http://fitnesse.org/でFitnessテストフレームワークを調べてください。