> On 24/12/2017, at 9:40 AM, Cheyo Jimenez via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> What are your thoughts on `final switch` as a way to treat any enum as 
> exhaustible?
> https://dlang.org/spec/statement.html#FinalSwitchStatement
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


I’d be very much in favour of this (qualms about the naming of the ‘final’ 
keyword aside - ‘complete’ or ‘exhaustive’ reads better to me). 

Looking back at the proposal, I noticed that something similar was mentioned 
that I earlier missed. In the proposal, it says:

> However, this results in some of your code being impossible to test, since 
> you can't write a test that passes an unknown value to this switch.

Is that strictly true? Would it be theoretically possible for the compiler to 
emit or make accessible a special ‘test’ case for non-exhaustive enums that can 
only be used in test modules or e.g. by a ‘EnumName(testCaseNamed:)’, 
constructor? There is  potential for abuse there but it would address that 
particular issue. 

Regardless, I still feel something like a ‘final switch’ is necessary if this 
proposal is introduced, and that it fits with the ‘progressive disclosure’ 
notion; once you learn this keyword you have a means to check for completeness, 
but people unaware of it could just use a ‘default’ case as per usual and not 
be concerned with exhaustiveness checking. 

Thomas

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to