I think this is an excellent argument for keeping where — I was tempted to make 
a hand waving argument in favor of keeping where, but I think you made the case 
as well as it can be made. (I suppose you could even argue that there are 
really 7 components to the other construct since you can have continue, break, 
or return, but that just underscores your point.)

I also agree with your points about using lazy.filter instead.

BTW, the project I’m currently working on has about 10-15 for loops that use 
where.

Net/net: I’m a -1 on the proposal.

> On Jun 24, 2016, at 11:38 AM, Tony Allevato via swift-evolution 
> <[email protected]> wrote:
> 
> IMO, we shouldn't be talking about "a single line of code" so much as "a 
> single cohesive construct". What's important to me isn't the line length or 
> whether the "where" part has to wrap onto another line, it's the number of 
> potentially divergent constructs I have to parse mentally in order to 
> determine the meaning of the loop.
> 
> With "for-in-where", it's three:
> 
>     for item(1) in someCollection(2) where someCondition(3)
> 
> With the alternatives suggested using if/guard/continue/break, it's more than 
> that:
> 
>     for item(1) in someCollection(2) {
>         [if | guard...else](3) someCondition(4) {
>             [continue | break](5)
>         }
>     }
> 
> I have to be more careful now interpreting the meaning of this loop because 
> both or either of if/guard or continue/break can invert its meaning, where 
> was "for-in-where" is concise and clear.
> 
> Doing .lazy.filter{...} is slightly cleaner than this, but still suffers from 
> the disadvantage that it's very easy for newcomers to leave out the "lazy" 
> part and accidentally write poorly performing code, and to the argument that 
> "where" is considered confusing by some users, I would argue that it's easier 
> to explain how it works than why "lazy" is necessary in this context.
>  
> 
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected] <mailto:[email protected]>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to