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

Xiaodi Wu xiaodi.wu at gmail.com
Sun Jul 10 23:34:58 CDT 2016


On Sun, Jul 10, 2016 at 11:21 PM, Erica Sadun <erica at ericasadun.com> wrote:

> On Jul 10, 2016, at 10:16 PM, Xiaodi Wu <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.).


>
> case C:
>   // ...
>   if B ~= x /* or y, or z, whichever is switched over */ {
>     continue
>   }
> case D:
>   // ...
> default:
>   // ...
> }
> ```
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160710/e552d0c3/attachment.html>


More information about the swift-evolution mailing list