What is the difference between IF-ELSE and SWITCH?
They are pretty similar but each has a few special features.
switch
-
switch
is usually more compact than lots of nestedif else
and therefore, more readable - If you omit the
break
between two switch cases, you can fall through to the next case in many C-like languages. Withif else
you'd need agoto
(which is not very nice to your readers ... if the language supportsgoto
at all). - In most languages,
switch
only accepts primitive types as key and constants as cases. This means it can be optimized by the compiler using a jump table which is very fast. -
It is not really clear how to format
switch
correctly. Semantically, the cases are jump targets (like labels forgoto
) which should be flush left. Things get worse when you have curly braces:case XXX: { } break;
Or should the braces go into lines of their own? Should the closing brace go behind the
break
? How unreadable would that be? etc. - In many languages,
switch
only accepts only some data types.
if-else
-
if
allows complex expressions in the condition while switch wants a constant - You can't accidentally forget the
break
betweenif
s but you can forget theelse
(especially during cut'n'paste) - it accepts all data types.
The main difference is that switch
despatches immediately to the case
concerned, typically via an indexed jump, rather than having to evaluate all the conditions that would be required in an if-else
chain, which means that code at the end of the chain is reached more slowly than code at the beginning.
That in turn imposes some restrictions on the switch
statement that the if-else
chain doesn't have: it can't handle all datatypes, and all the case
values have to be constant.