[swift-evolution] Add a while clause to for loops

Xiaodi Wu xiaodi.wu at gmail.com
Tue Jun 7 15:26:39 CDT 2016


On Tue, Jun 7, 2016 at 3:24 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:

> It may be workable if you can have only one or the other, but mixing and
> matching them as proposed above would be a world of hurt:
>
> ```
> for foo in bar where condition1 while condition2 { ... }
> ```
>
> If condition1 and condition2 both evaluate to true,
>

s/true/false/


> then whether you continue or break would depend on the relative order of
> where and while; for generality, you would want to allow both
> `for...in...where...while` and `for...in...while...where`, and likely
> `for...in...while...where...while`, etc. There is nothing in the meaning of
> those words that would suggest that `while...where` behaves differently
> from `where...while`, etc. This is why words like "break" and "continue"
> are IMO far superior.
>
>
>
> On Tue, Jun 7, 2016 at 2:34 PM, Erica Sadun <erica at ericasadun.com> wrote:
>
>>
>> On Jun 7, 2016, at 1:16 PM, Tim Vermeulen via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> The meaning of the proposed while is not at all a pair for where, since
>> where clauses in while loops would do the same thing as while clauses in
>> for loops. That's crazy.
>>
>>
>> It sounds crazy, but it’s the nature of the while loop. A where clause in
>> a while loop also has a different result than a where clause in a for loop.
>>
>>
>> The where_clause appears in the for in statement
>>
>> for_in_statement : 'for' 'case'? pattern 'in' expression where_clause?
>> code_block
>>
>> It's syntactic sugar because the expression can be already be limited
>> through functional chaining of some sort or another. At the same time, it's
>> nice and pleasant to have `where` and I'm not itching to throw it out. The
>> same courtesy could be easily extend to `when` (because I don't really want
>> to use the `while` keyword here, but I could easily be convinced otherwise
>> because I don't have a strong stance either way):
>>
>> for_in_statement : 'for' 'case'? pattern 'in' expression (where_clause |
>> when_clause)? code_block
>> when_clause : 'when' expression
>>
>> and again it could be nice and pleasant to have, although not necessary.
>> The question comes down to how much does the language benefit by this sugar.
>>
>> I'd say that in both cases, combining chaining and statements is
>> marginally *less good* than either using standalone chaining or
>> statements without chaining. But as I say this, I know as a fact, I fully
>> intend to use `sequence(_:, next:).take(while:)` with for0in statements, so
>> I'm starting from a hypocritical vantage point.
>>
>> To summarize, I'm more +0.01 than I am -0.01 on this.
>>
>> -- E
>> p.s. Sorry, wux
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160607/7d45771b/attachment.html>


More information about the swift-evolution mailing list