[swift-evolution] [Pitch] Introduce continue to switch statements

Erica Sadun erica at ericasadun.com
Sun Jul 10 23:51:13 CDT 2016


> On Jul 10, 2016, at 10:34 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
> 
> 
> 
> On Sun, Jul 10, 2016 at 11:21 PM, Erica Sadun <erica at ericasadun.com <mailto:erica at ericasadun.com>> wrote:
>> On Jul 10, 2016, at 10:16 PM, Xiaodi Wu <xiaodi.wu at gmail.com <mailto:xiaodi.wu at gmail.com>> wrote:
>> Given patterns A, B, C, and D, suppose a value x matches A, C, and D, whereas another value y matches B and D, and a third value matches B and C. When evaluating x, y, or z, which statements are executed in the following switch statement? How many of these reach the default case? What happens if I append `fallthrough` at the end of case D? What happens if I move case B after case D? (Yes, I know it is possible to figure it out [my understanding of the answer to the first question is appended below], but I hope you'll agree with me that this is much more difficult to decipher than any switch statement that's currently possible.)
>> 
>> ```
>> switch x /* or y, or z */ {
>> case A:
>>   // ...
>>   continue
>> case B:
>>   // ...
>>   if C ~= x /* or y, or z, whichever is switched over */ {
>>     continue
>>   }
>>   fallthrough
> 
> I'd say it would be fair to disallow continue and fallthrough to occur in the same clause
> 
> Why should `fallthrough` be prohibited but implicit `break` become mandatory in such a clause? If `continue` were to be implemented in this context, I'd want the full power of the keyword, including being allowed to `continue` conditionally, `continue` with different labels, and round out the case if no conditions are satisfied with either `fallthrough` or `break` (or, for that matter, `return`, etc.).

I do not understand. `break` is already implicit unless no other code is used. 

case something:
   if condition { continue }
   // ends here. the compiler knows not to go forward and it's not an empty clause
case somethingElse:

`fallthrough` means "ignore the next case statement and execute its clause".

-- E
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160710/c260c758/attachment.html>


More information about the swift-evolution mailing list