Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Dispatch table
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Computer code structure with a table of pointers to functions or similar}} In [[computer science]], a '''dispatch table''' is a table of [[pointer (computer programming)|pointer]]s or [[memory address]]es to functions or [[method (computer science)|method]]s.<ref>{{cite web |last1=Goldfuss |first1=Alice |title=Function Dispatch Tables in C |url=https://blog.alicegoldfuss.com/function-dispatch-tables/ |website=alicegoldfuss.com |access-date=23 January 2021}}</ref> Use of such a table is a common technique when implementing [[late binding]] in [[object-oriented programming]]. == In different programming languages == === Perl === The following shows one way to implement a dispatch table in [[Perl]], using a [[Associative array#Perl|hash]] to store references to code (also known as [[function pointer]]s). <syntaxhighlight lang="perl"> # 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"; </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> == Virtual method tables == {{Main|Virtual method table}} In [[object-oriented programming|object-oriented]] [[programming language]]s that support [[virtual method]]s, the [[compiler]] will automatically create a dispatch table for each object of a [[class (computer science)|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 == {{reflist}} * [[Diomidis Spinellis]] (2003). ''[[Code Reading]]: The Open Source Perspective''. Boston, MA: Addison-Wesley. {{ISBN|0-201-79940-5}} [[Category:Method (computer programming)]] [[Category:Articles with example Perl code]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:ISBN
(
edit
)
Template:Main
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)