Switch The "switch ()"

Why does Java and other popular programming languages like C, C++ "Switch" statements have a fall through behaviour by default,
the most common or popular use of a switch statment is when we just want to choose a paticular option based on the value passed to switch statement and then get out of it, the fallthrough behavior is not what is needed most of the time ( atleast thats what my programming experience says..), you end up putting "break;" statements just to avoid this fall through most of times,

why was the switch statement not designed the other way round, put a statement in "case 'x':" which allows you to fallthrough if you need it, the default behavior will be just to "break" out of switch after a matching case is found,

will it not help and save lots of LOC worldwide... :)

12,283 views 5 replies
Reply #1 Top
it is because of an error, and because people are hard to fix errors when they come from the tradition. Legacy knowledge sux.
Anyway, IIRC In c#, this works as expected, withouth fallthrough. Probably because C# is also a descendent of Delphi (and thus Pascal).

I prefer languages where the switch/case is more of a pattern match operation, i.e. ruby or perl with the switch module.
Reply #2 Top
I had the same problem when I first started using the switch() statement in PHP after using it in a different language for 10 years, but after a while I began to see the advantages of allowing a fall-through with multiple case statements, and I have taken advantage of this on more than one occasion. Personally I prefer the choice the fall-through gives me - if I don't want a fall-through I simply insert a break statement, but if I DO want a fall-through, then I leave it out.

It's a similar case with the parent constructor when I instantiate a subclass - the parent constructor is not called by default. If I want it executed then I must do it explicitly. This is how I like it because most of the time I have code in the subclass which I want processed INSTEAD OF the code in the parent class. If the parent constructor were to be executed EVEN WHEN I DID NOT WANT IT TO then I would be snafu'd.

I like the flexibility that the switch fall-through and non-execution of the parent constructor give me. It means that I have complete control over what happens instead of the language making the wrong decision for me.
Reply #3 Top
hmm... it says the article got 2 comments, but I can't see any.

Anyways,...
I'm not sure, but might it be because VB you can put several options separated by a comma,
Case 1, 2, 3:
//Do something
Case 4


however in JScript (haven't tried C or Java) you have to do something like
Case 1
Case 2
Case 3
//Do something
break;
Case 4


but that doesn't explain why JScript don't have comma separated switch list.
Reply #4 Top
>>>"switch() statement in PHP after using it in a different language for 10 years"

just plain curiosity...which language had this facility (of non fall through behavior)10 years ago...i thought this fallthrough is coming from olden days....
Reply #5 Top
Because initially, in C, the switch() is just a shortcut for a jump based on value. Imagine your case statements as a list of instructions. The normal behavior after executing an operation is to move to the next operation. The case: labels are really just that, labels for points in the code sequence.

You want switch() to be more of a code construct, with an implicit JMP to the end of the block after your case: stanzas. That's a higher level view, but in C at least, switch is just a slightly higher level view of the machine code.