Dispatch table

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

Perl implementation

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).

# 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";
}
 
# Fetch the code ref from the table, and invoke it
my $sub = $dispatch{$ARGV[0]};
print $sub ? $sub->() : "unknown argument\n";

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

JavaScript implementation

Following is a demo of implementing dispatch table in JavaScript:

var thingsWeCanDo = {
    doThisThing      : function() { /* behavior */ },
    doThatThing      : function() { /* behavior */ },
    doThisOtherThing : function() { /* behavior */ },
    default          : function() { /* behavior */ }
};

var doSomething = function(doWhat) {
    var thingToDo = thingsWeCanDo.hasOwnProperty(doWhat) ? doWhat : "default"
    thingsWeCanDo[thingToDo]();
}

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.

gollark: The upshot of this is that you can press "s", type a query, have relevant pages semifuzzily matched, and press "enter" to navigate to the one you want (assuming the one you want is also at the top). HIGHLY productive.
gollark: Also, when the search query box comes into existence it's focused using javascriptoids™, *and* when you press enter in it it goes to the first matching page you aren't already on.
gollark: ```javascriptdocument.body.addEventListener("keydown", e => { if (e.target === document.body) { // maybe use alt instead? or right shift or something - this just detects unfocused keypresses if (e.key === "e") { location.pathname = urlForPage(currentPage, "edit") } else if (e.key === "v") { location.pathname = urlForPage(currentPage) } else if (e.key === "r") { location.pathname = rlForPage(currentPage, "revisions") } else if (e.key === "s") { state.showingSearchDialog = !state.showingSearchDialog m.redraw() } }})```
gollark: Minoteaur just got keyboard navigation! You can press "v" to switch to "view", "e" to switch to "edit", or "s" to open search.
gollark: https://github.com/osmarks/random-stuff

See also

References

  • Diomidis Spinellis (2003). Code Reading: The Open Source Perspective. Boston, MA: Addison-Wesley. ISBN 0-201-79940-5
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.