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.