In computer science, a dispatch table is a table of pointers or memory addresses to functions or methods. Use of such a table is a common technique when implementing late binding in object-oriented programming.

It is primarily used to simplify program lines and reduce lines of code.

In different programming languages

Perl

The following shows one way to implement a dispatch table in Perl, using a hash to store references to code (also known as function pointers).

<syntaxhighlight lang="perl">

  1. Define the table using one anonymous code-ref and one named code-ref

my %dispatch = (

"-h" => sub { return "hello\n"; },

"-g" => \&say_goodbye

);

sub say_goodbye {

return "goodbye\n";

}

  1. Fetch the code ref from the table, and invoke it

my $sub = $dispatch{$ARGV[0]};

print $sub ? $sub->() : "unknown argument\n";

</syntaxhighlight>

Running this Perl program as <code>perl greet -h</code> will produce "hello", and running it as <code>perl greet -g</code> will produce "goodbye".

JavaScript

Following is a demo of implementing a dispatch table in JavaScript:

<syntaxhighlight lang="javascript">const thingsWeCanDo = {

doThisThing() { /* behavior */ },

doThatThing() { /* behavior */ },

doThisOtherThing() { /* behavior */ },

default() { /* behavior */ }

};

function doSomething(doWhat) {

const thingToDo = Object.hasOwn(thingsWeCanDo, doWhat)

? doWhat

: "default";

return thingsWeCanDo[thingToDo]();

}</syntaxhighlight>

Lua

In Lua, this behavior is supported and encouraged. Here is an example:<syntaxhighlight lang="lua">

local colors = { -- This is a lookup table improving speed and simplifying program logic

red = "#ff0000",

green = "#00ff00",

blue = "#0000ff"

}

print("Enter a color:")

local choice = io.read("*l")

local color = colors[choice]

if color then

print("Your color in Hex format is: " .. color)

end

</syntaxhighlight>

Virtual method tables

In object-oriented programming languages that support virtual methods, the compiler will automatically create a dispatch table for each object of a class containing virtual methods. This table is called a virtual method table or vtable, and every call to a virtual method is dispatched through the vtable.

See also

  • Branch table

References

  • Diomidis Spinellis (2003). Code Reading: The Open Source Perspective. Boston, MA: Addison-Wesley.