Loading article…
コンピュータサイエンスにおいて、ディスパッチテーブルとは関数やメソッドへのポインタやメモリアドレスのテーブルである。[1]このようなテーブルの使用は、オブジェクト指向プログラミングで遅延バインディングを 実装する際によく使われる手法である。
Perl実装
以下は、ハッシュを使用してコードへの参照 (関数ポインタとも呼ばれます) を格納する、Perlでディスパッチ テーブルを実装する 1 つの方法を示しています。
# 1 つの匿名コード参照と 1 つの名前付きコード参照を使用してテーブルを定義します。
my %dispatch = ( "-h" => sub { return "hello\n" ; }, "-g" => \& say_goodbye ); sub say_goodbye { return "goodbye\n" ; } # テーブルからコード参照を取得して呼び出します。my $sub = $dispatch { $ARGV [ 0 ]}; print $sub ? $sub -> () : "unknown argument\n" ;
この Perl プログラムを として実行するとperl greet -h「hello」が生成され、 として実行するとperl greet -g「goodbye」が生成されます。
JavaScript実装
以下は、JavaScript でディスパッチ テーブルを実装するデモです。
const thingsWeCanDo = { doThisThing () { /* 動作 */ }, doThatThing () { /* 動作 */ }, doThisOtherThing () { /* 動作 */ }, default () { /* 動作 */ } };
関数doSomething ( doWhat ) { const thingToDo = Object .hasOwn ( thingsWeCanDo , doWhat ) ? doWhat : "default" ; return thingsWeCanDo [ thingToDo ] (); }
仮想メソッドテーブル
仮想メソッドをサポートするオブジェクト指向 プログラミング言語では、コンパイラは仮想メソッドを含むクラスの各オブジェクトに対してディスパッチ テーブルを自動的に作成します。このテーブルは仮想メソッド テーブルまたはvtableと呼ばれ、仮想メソッドへのすべての呼び出しは vtable を通じてディスパッチされます。
参照
参考文献
- ^ Goldfuss, Alice. 「C言語の関数ディスパッチテーブル」alicegoldfuss.com . 2021年1月23日閲覧。
- Diomidis Spinellis (2003)。『Code Reading : The Open Source Perspective』。ボストン、マサチューセッツ州: Addison-Wesley。ISBN 0-201-79940-5
