removing default case requirement?

Timon Gehr timon.gehr at gmx.ch
Fri Mar 31 21:04:52 UTC 2023


On 3/31/23 17:20, Steven Schveighoffer wrote:
> Imagine if every `if` statement required you to write an `else` clause, 
> even if it was empty. The idea would be, that you have to affirmatively 
> attest that you didn't want to have a special case for when it didn't 
> match the condition.
> 
> How fast do you think that everyone would run screaming for the exits?
> 
> But we have such a thing, in the `default:` case requirement.
> 
> In my code, it happens quite a bit that I throw an exception in the 
> default case, or return something, but there's still a lot of `default: 
> break;` code in there.
> 
> But consider a few things here:
> 
> 1. I have `final switch` at my disposal whenever I need it, which allows 
> me to avoid `default:` and is really meant for "I want to make sure I 
> handle everything"
> 2. If you forget to return something, or throw an exception, the 
> compiler will still let you know (i.e. some code paths don't return a 
> value). This counts for the majority of places where I have a `default` 
> case that's not just `break;`.
> 3. I know in my experience (yours may vary) that when I forget to 
> include a default, it's usually because I forgot to include `default: 
> break;`. So the rule hasn't really helped me avoid bad code.
> 4. `switch` is already bloated enough with the requirement for `break` 
> or `goto` between cases.
> 
> If we wanted to relax this requirement it's actually an easy change -- 
> no currently-compiling code will break.
> 
> Why not? How much does this rule help you, vs. annoy you?
> 
> -Steve

I prefer the current behavior.


More information about the Digitalmars-d mailing list