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

T.J. Usiyan griotspeak at gmail.com
Mon Jun 6 14:31:05 CDT 2016


(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 <tseitz42 at icloud.com> wrote:

>
> > Am 06.06.2016 um 19:43 schrieb Tim Vermeulen via swift-evolution <
> swift-evolution at 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 at swift.org(mailto:swift-evolution at 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 at swift.org(mailto:swift-evolution at swift.org)
> >>> https://lists.swift.org/mailman/listinfo/swift-evolution
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160606/442d958e/attachment.html>


More information about the swift-evolution mailing list