Summarising my initial post and comments – there are several advantages of switch
statement over if
/else
statement:
-
Cleaner code. Code with multiple chained
if
/else if ...
looks messy and is difficult to maintain –switch
gives cleaner structure. -
Performance. For dense
case
values compiler generates jump table, for sparse – binary search or series ofif
/else
, so in worst caseswitch
is as fast asif
/else
, but typically faster. Although some compilers can similarly optimiseif
/else
. -
Test order doesn’t matter. To speed up series of
if
/else
tests one needs to put more likely cases first. Withswitch
/case
programmer doesn’t need to think about this. -
Default can be anywhere. With
if
/else
default case must be at the very end – after lastelse
. Inswitch
–default
can be anywhere, wherever programmer finds it more appropriate. -
Common code. If you need to execute common code for several cases, you may omit
break
and the execution will “fall through” – something you cannot achieve withif
/else
. (There is a good practice to place a special comment/* FALLTHROUGH */
for such cases – lint recognises it and doesn’t complain, without this comment it does complain as it is common error to forgotbreak
).
Thanks to all commenters.