On Fri, 4 Feb 2005, Smith, Jeff wrote:

> What you are try to do is "execute a block of code based on the value of
> a single statement."  if/elif doesn't do that and thereby introduces the
> possibility of errors.
>
> switch on-this:
>       case 'a':
>               do something
>       case 'b':
>               do something else
>       case 'c':
>               do yet something else
>
> Is much clearer and more maintatinable than
>
> if on-this == 'a':
>       do something
> elif on-this == 'b':
>       do something else
> elif on-this == 'c':
>       do yet something else


Hi Jeff,


if/elif chains like this can be improved by using a table-dispatch
technique:

### Python Pseudocode ###
def doActionA():
    ...

def doActionB():
    ...

def doActionC():
    ...

dispatchTable = { 'a' : doActionA,
                  'b' : doActionB,
                  'c' : doActionC }
dispatchTable[on_this]()
######


We perfectly agree with you about the hideousness of using if/elif/elif to
do a 'switch'-style control flow.  But that's not the only tool in our
arsenal.  *grin*


switch() in other languages like C or Java have other limitations that are
hard to explain to beginners.  As one concrete example: we can't use a
string as the dispatch value in Java's switch.  We're restricted to use
chars, bytes, shorts, or ints, due to the low-level implementation nature
of 'switch':

http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#35518

(I believe the expression is used as an index into a jump table, which
limits it to something small and numeric.)  Ultimately, this restricts the
use of 'switch' to simple dispatch tasks, and we can already handle those
nicely with a dictionary lookup.



Hope this helps!

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to