[swift-evolution] [Pitch] Introduce continue to switch statements
Erica Sadun
erica at ericasadun.com
Mon Jul 11 09:54:52 CDT 2016
> On Jul 11, 2016, at 4:49 AM, Ross O'Brien <narrativium+swift at gmail.com> wrote:
>
> I'm in favour of this concept being available in Swift, but it does need to make a clear distinction somewhere between a case which matches anything (and can catch any fallthrough/continue) and a case which matches none of the above. I don't know whether we need to introduce an explicit term for this, or whether we make this the distinction between 'case _:' and 'default:' (with the side-effect that we can now justify 'default' in the language).
>
> For example: let's use this switch to play fizzbuzz.
>
> switch value
> {
> case x where x % 3 == 0:
> print("fizz")
> continue
> case x where x % 5 == 0:
> print("buzz")
> default:
> print(value)
> }
>
> I know this is a trivial example, but it's also a frequent example used to teach switch to programmers.
> The keywords in play are 'continue' and 'default'. A multiple of 5 but not 3 will print 'buzz' and be done. A multiple of 3 and 5 will print 'fizz buzz'. Any number not a multiple of 3 or 5 will say its value. Crucially, a multiple of 3 but not 5 will say fizz, won't say buzz, and won't say the number itself - whereas if we used 'case _', it would say fizz and then the number itself.
The standard question asks you to print the value and then fizz and/or buzz on the same line and then move to the next line.
If you use the rules you stated ("Any number not a multiple of 3 or 5 will say its value."), it would look like this:
switch value
{
case _ where !(x % 5 == 0 || x % 3 == 0):
print(value)
case x where x % 3 == 0:
print("fizz", terminator: "")
continue
case x where x % 5 == 0:
print("buzz", terminator: "")
continue
default:
print("")
break
}
If you use the standard rules, it looks like this:
switch value
{
case _:
print(value, terminator: "")
case x where x % 3 == 0:
print(" fizz", terminator: "")
continue
case x where x % 5 == 0:
print(" buzz", terminator: "")
continue
default:
print("")
break
}
-- E
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160711/0f4adc74/attachment.html>
More information about the swift-evolution
mailing list