(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 <[email protected]> wrote: > > > Am 06.06.2016 um 19:43 schrieb Tim Vermeulen via swift-evolution < > [email protected]>: > > > > 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< > [email protected](mailto:[email protected])>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 > >>> [email protected](mailto:[email protected]) > >>> 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
