[swift-evolution] [DRAFT] Regularizing Where Grammar (was Re: Add a while clause to for loops)

Erica Sadun erica at ericasadun.com
Thu Jun 9 16:37:50 CDT 2016

On Jun 9, 2016, at 3:18 PM, Rob Norback <rnorback at gmail.com> wrote:
> Def like this change, but Erica I'm wondering what changed your mind about the syntax since the last I read you still were concerned by the ambiguity between filtering and exiting.

My concerns remain. However, after going back and forth with Brent, 
wux, and others, I think my concerns could be addressed in style guides 
and linters[1]. This draft introduces a major consistency win, I get to rail 
against actually using the feature when I publicly opine[2], but when 
used it will be better. (I'm quite curious to see hear from someone on the 
core team whether this change is practical and whether it improves parsing 
or makes it harder from the compiler's point of view.)

In any case, I reserve the right to argue from several different points of 
view[1, ibid] to see how well each suggestion works (and to hear the feedback 
and opinions of others) before settling on anything. Until it's a pull request, it's 
not fixed. And even then, I still want to listen to arguments.

-- Erica

[1] As the Italians say, "La donna è mobile <https://en.wikipedia.org/wiki/La_donna_%C3%A8_mobile>", which translates to "women are furniture." Ask an Italian.
[2] I find a `where`-less `for-in` loop with `guard` statements to read the most clearly and offer the most maintainable approach. My computation tests show that it is in the top efficiency group.
[3] Nulla nota 3.

> On Thu, Jun 9, 2016 at 1:54 PM Erica Sadun via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> On Jun 9, 2016, at 1:57 PM, Haravikk <swift-evolution at haravikk.me <mailto:swift-evolution at haravikk.me>> wrote:
>> I think the idea here is for a change from the first to the second of:
>> 	for eachValue in theValues where eachValue.isOdd { … }
>> 	for eachValue where eachValue.isOdd in theValues { … }
>> I’m kind of split on this for a few reasons. The first is that it doesn’t ready quite as well plain like this, however I find it looks a bit better like:
>> 	for (eachValue where eachValue.isOdd) in theValues { … }
> for eachValue where eachValue.isOdd in theValues { ... }
> for case .Some(let value) where value > 5 in theValues { ... }
> vs
> for eachValue in theValues where eachValue.isOdd {...}
> for case .Some(let value) in theValues where value > 5 { ... }
> It should be parseable without parens.
>> Just to clarify that what we’re looking for in theValues is “eachValue where eachValue.isOdd”, though I could probably learn to read it like this without parenthesis. That said, parenthesis lines up nicely with assignment of tuples like:
>> 	for (eachKey, eachValue where eachValue > 5) in theKeyValuePairs { … }
> for (eachKey, eachValue) where eachValue > 5 in theKeyValuePairs {... }
> The where clause is distinct from the pattern
> -- E
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160609/320c318a/attachment.html>

More information about the swift-evolution mailing list