I didn’t mean we should really get rid of the `where` clause, it’s great. I 
guess the point I was trying to make is that we can use a `where` clause with a 
`for` loop in Swift, despite the existence of the `filter` method. So despite 
`prefix(while:)` in Swift 3, there might be room for a `while` clause. I think 
it makes the code a lot more readable, much like how `where` can make a `for` 
loop a lot more readable than using `filter`.

> The burden of proof for adding new features is different from that for taking 
> away existing features.
> 
> If a feature doesn't yet exist, a successful proposal will show how it 
> provides additional and non-trivial utility. If a feature already exists, a 
> successful proposal to remove it will show how it is harmful to the language 
> or contrary to the direction in which it is evolving.
> 
> On Mon, Jun 6, 2016 at 15:38 Tim 
> Vermeulen<tvermeu...@me.com(mailto:tvermeu...@me.com)>wrote:
> > The functionality of the `where` clause in `for` loops also already can be 
> > mimicked using `filter`. Wouldn’t we have to get ride of the `where` clause 
> > by that logic?
> > 
> > >The functionality being asked for here is already accepted for inclusion 
> > >to Swift as a method on Sequence named `prefix(while:)` (SE-0045):
> > >
> > >`for element in array.prefix(while: { someCondition($0) }) { ... }`
> > >On Mon, Jun 6, 2016 at 14:31 T.J. Usiyan via 
> > >swift-evolution<swift-evolution@swift.org(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)>wrote:
> > >>(As I said, I can live with `while`. I am simply presenting a potential 
> > >>point of confusion.)
> > >>You aren't evaluating the statements in the loop 'while' the condition 
> > >>isn't met. The first time that the condition isn't met, evaluation of the 
> > >>loop stops. I get that this is technically true for the `while` construct 
> > >>but I suggest that the only reason that it works there is that 'stopping 
> > >>the first time that the condition isn't met' *is* the construct. Here, we 
> > >>have a loop that we execute for each thing and we're tacking 
> > >>on/intermingling the `while` construct.
> > >>
> > >>
> > >>
> > >>On Mon, Jun 6, 2016 at 2:19 PM, Thorsten 
> > >>Seitz<tseit...@icloud.com(mailto:tseit...@icloud.com)(mailto:tseit...@icloud.com)>wrote:
> > >>>
> > >>>>Am 06.06.2016 um 19:43 schrieb Tim Vermeulen via 
> > >>>>swift-evolution<swift-evolution@swift.org(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)>:
> > >>>>
> > >>>>I also considered `until`, but it would be a bit confusing that `where` 
> > >>>>makes sure a condition is met, while `until` makes sure the condition 
> > >>>>isn’t met. I think `while` makes more sense because it corresponds to 
> > >>>>`break` in the same way that `where` corresponds to `continue`.
> > >>>
> > >>>That's a good argument! The only drawback is that `while` and `where` 
> > >>>look quite similar at a glance.
> > >>>
> > >>>-Thorsten
> > >>>
> > >>>>
> > >>>>>`while`, to me, actually reads like it should do what `where` does.
> > >>>>
> > >>>>To me, `while` reads like it should stop the loop once the condition 
> > >>>>isn’t met, just like in a while loop.
> > >>>>
> > >>>>>I hadn't thought about `while` in this regard but wouldn't `until` 
> > >>>>>make more sense? `while`, to me, actually reads like it should do what 
> > >>>>>`where` does. In any case, whether it is `while` or `where`, this 
> > >>>>>seems like a reasonable feature in my opinion.
> > >>>>>
> > >>>>>TJ
> > >>>>>
> > >>>>>On Mon, Jun 6, 2016 at 5:15 AM, Tim Vermeulen via 
> > >>>>>swift-evolution<swift-evolution@swift.org(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)>wrote:
> > >>>>>>We can already use a where clause in a for loop like this:
> > >>>>>>
> > >>>>>>for element in array where someCondition(element) {
> > >>>>>>// …
> > >>>>>>}
> > >>>>>>
> > >>>>>>which basically acts like
> > >>>>>>
> > >>>>>>for element in array {
> > >>>>>>guard someCondition(element) else { continue }
> > >>>>>>// …
> > >>>>>>}
> > >>>>>>
> > >>>>>>Sometimes you want to break out of the loop when the condition isn’t 
> > >>>>>>met instead. I propose a while clause:
> > >>>>>>
> > >>>>>>for element in array while someCondition(element) {
> > >>>>>>// …
> > >>>>>>}
> > >>>>>>
> > >>>>>>which would be syntactic sugar for
> > >>>>>>
> > >>>>>>for element in array {
> > >>>>>>guard someCondition(element) else { break }
> > >>>>>>…
> > >>>>>>}
> > >>>>>>
> > >>>>>>I can see this particularly being useful if we have a sorted array 
> > >>>>>>and we already know that once the condition isn’t met, it won’t be 
> > >>>>>>met either for subsequent elements. Another use case could be an 
> > >>>>>>infinite sequence that we want to cut off somewhere (which is simply 
> > >>>>>>not possible using a where clause).
> > >>>>>>_______________________________________________
> > >>>>>>swift-evolution mailing list
> > >>>>>>swift-evolution@swift.org(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)
> > >>>>>>https://lists.swift.org/mailman/listinfo/swift-evolution
> > >>>>_______________________________________________
> > >>>>swift-evolution mailing list
> > >>>>swift-evolution@swift.org(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)
> > >>>>https://lists.swift.org/mailman/listinfo/swift-evolution
> > >>
> > >>_______________________________________________
> > >>swift-evolution mailing list
> > >>swift-evolution@swift.org(mailto:swift-evolution@swift.org)(mailto:swift-evolution@swift.org)
> > >>https://lists.swift.org/mailman/listinfo/swift-evolution
> > >
> > >
> > >_______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> 
> 
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to