Often when I hear about the switch statement, its put off as a way to replace long if…else chains. But it seems that when I use the switch statement I'm writing more code that I would be just writing if…else. You also have other issues like keeping all variables for all calls in the same scope.
Here's some code that represents the flow I normally write (thanks to diam)
String comment; // The generated insult.
int which = (int)(Math.random() * 3); // Result is 0, 1, or 2.
if (which == 0) {
comment = "You look so much better than usual.";
} else if (which == 1) {
comment = "Your work is up to its usual standards.";
} else if (which == 2) {
comment = "You're quite competent for so little experience.";
} else {
comment = "Oops -- something is wrong with this code.";
}
Then they want me to replace that with this:
String comment; // The generated insult.
int which = (int)(Math.random() * 3); // Result is 0, 1, or 2.
switch (which) {
case 0:
comment = "You look so much better than usual.";
break;
case 1:
comment = "Your work is up to its usual standards.";
break;
case 2:
comment = "You're quite competent for so little experience.";
break;
default:
comment = "Oops -- something is wrong with this code.";
}
Seems like a lot more code in a much more awkward syntax. But is there really an advantage to using the switch statement?
Best Answer
For this particular situation, it seems to me that both
if
andcase
are poor choices. I'd use a simple array:As a side note, you should generally compute the multiplier based on the size of the array rather than hard-coding the
3
.As to when you would use a case/switch, the difference from a cascade of
if
statements (or at least one major difference) is thatswitch
can semi-automatically optimize based on the number and density of values, whereas a cascade ofif
statements leaves the compiler with little choice but to generate code as you've written it, testing one value after another until it finds a match. With only three real cases, that's hardly a concern, but with a sufficient number it can/could be significant.