I agree. `where` and `while` fit so well in for loops, IMO, because a for loop 
already loops over the elements - this is exactly what filter and prefix also 
do. You’ve even given the current element a name (for myElement in …) and it’s 
more natural to just use that name in a `where` clause or `whil`e clause, than 
to have to deal with $0 inside a closure.

> I strongly disagree.
> 
> Exchanging
> 
> forresultinresultswhereresult.value != .Warningwhileresult.value != .Error {
> /// ...
> }
> 
> 
> for either
> 
> forresultinresults.filter({ $0.value != .Warning }).prefix(while: { $0.value 
> != .Error })) {
> /// ...
> }
> 
> 
> or
> 
> forresultinresults {
> ifresult.value == .Warning {continue}
> ifresult.value == .Error {break}
> 
> /// ...
> }
> 
> 
> Seems like an absolute step back. Not to mention filter(_:) doesn't return a 
> lazy collection, but will recreate it, while the `where` will do on-the-fly 
> check.
> 
> > On Jun 7, 2016, at 1:34 AM, Xiaodi Wu via 
> > swift-evolution<swift-evolution@swift.org(mailto:swift-evolution@swift.org)>wrote:
> > Personally, given this discussion and the one about `where` in if and while 
> > statements, I would not be opposed to elimination of `where` in control 
> > statements altogether.
> > 
> > My reasoning would be that words like filter and prefix unambiguously 
> > indicate what happens to elements of a sequence for which the predicate 
> > returns false, whereas words like where and while are ambiguous.
> > 
> > On Mon, Jun 6, 2016 at 17:52 Tim 
> > Vermeulen<tvermeu...@me.com(mailto:tvermeu...@me.com)>wrote:
> > > 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)(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)(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)(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)(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)(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)(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)(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)(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)
> > > >https://lists.swift.org/mailman/listinfo/swift-evolution
> > > >
> > > >
> > > >_______________________________________________
> > swift-evolution mailing list
> > 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

Reply via email to