![]() |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
If one variable has to be tested for a lot of different values, the resulting list of `if-else-if-else' statements soon gets very long and not very easy to read. However, if the type of the value you are testing is an integer, a float or a string you can use a much denser and neater way of coding. Assume you have the following code you want to write:
if (name == "fatty") { nat = "se"; desc = "blimp"; } else if (name == "plugh") { nat = "no"; desc = "warlock"; } else if (name == "olorin") { nat = "de"; desc = "bloodshot"; } else { nat = "x"; desc = "unknown"; } |
The better way of writing this is as follows:
switch (name) { case "fatty": nat = "se"; desc = "blimp"; break; case "plugh": nat = "no"; desc = "warlock"; break; case "olorin": nat = "de"; desc = "bloodshot"; break; default: nat = "x"; desc = "unknown"; } |
The workings of this statement is very simple really: switch
sets
up the expression value within the parenthesis for matching. Then every
expression following a case
is examined to find a
match.
NB! The case
expression must be a
constant value, it can't be a variable, function call or other type of
expression.
After a match has been found the following statements are executed until
a break
statement is found. If no matching value can be found,
the default
statements are executed instead.
NB! While it's not mandatory to have a default
section,
it's highly recommended since that usually means that something has
happened that wasn't predicted when writing the program. If you have
written it that way on purpose that's one thing, but if you expect only
a certain range of values and another one turns up it's usually very
good to have an error message there to notify the user that something
unexpected happened.
If you forget to put in a 'break' statement the following 'case' expression will be executed. This might sound like something you don't want, but if in the example above the names `fatty' and `plugh' both should generate the same result you could write:
case "fatty": /* FALLTHROUGH */ case "plugh": < code > break; |
... and save a bit of space. Writing code with switch doesn't make it any
quicker to execute, but a lot easier to read thereby reducing the chance of
making mistakes while coding. Remember to put the /* FALLTHROUGH */
comment there though, or it might be hard to remember later if it was
intentional or an omission of a break
statement, particularly if
you have some code that's executed previously to the fall through. A good
idea is usually to add an extra linefeed after a break
statement
just to give some extra 'breathing space' to improve on legibility.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |