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 –switchgives cleaner structure. -
Performance. For dense
casevalues compiler generates jump table, for sparse – binary search or series ofif/else, so in worst caseswitchis 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/elsetests one needs to put more likely cases first. Withswitch/caseprogrammer doesn’t need to think about this. -
Default can be anywhere. With
if/elsedefault case must be at the very end – after lastelse. Inswitch–defaultcan be anywhere, wherever programmer finds it more appropriate. -
Common code. If you need to execute common code for several cases, you may omit
breakand 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.