break seen as a C archaism
brian.goetz at oracle.com
Wed Mar 14 01:38:21 UTC 2018
There are three arguments why the N case is significantly different from the 2 case.
There are a number of idioms that require statements in addition to an expression. Debugging printfs, objects that take statements to initialize (construct/set/set/break), incrementing counters, cases that require side conditions (if today is tuesday do one thing, otherwise another), etc. Each individually is rare-ish, but not all that rare.
The "static applicability" argument is that the larger the number of cases, the more likely one of them will fall into one these buckets, and then the whole thing has to fall back to statements. This makes expression switches less useful, and falling off this cliff is likely to irritate users every time it happens.
The “dynamic applicability” argument is that, if you want to change an existing switch (say, to add a debugging printf in one path), you have to refactor the whole thing. Which will be met, by users, with “YGBFKM.”
The “cliff height” argument says that falling off the cliff on a two-way conditional and having to refactor to if-else is far less painful than falling off the cliff on an N-way switch. Its a more painful refactor.
So for all these reasons, not being able to occasionally include some statements means many more switches that can’t use the feature (which is safer, clearer, and more compact), and also more often that the user will have to gratuitously refactor perfectly good code as they make small changes.
> On Mar 13, 2018, at 8:59 PM, Kevin Bourrillion <kevinb at google.com> wrote:
> - Do nothing; only allow single expressions. Non-starter.
> We're just saying the feature seems to be at least 90% as applicable without it. Roughly. Why is it a non-starter for the other 10% to stick with the switch they've always had? I'm sure there are good answers to that, I'm not doubting there are, but I think we should explore them instead of just declaring something a non-starter by fiat.
> Also, if it is true that this is a "non-starter", I would assume it is also a non-starter to only allow single expressions in the conditional operator `?:`. If not, what is the fundamental difference?
More information about the amber-spec-observers