# [swift-evolution] [swift-evolution-announce] [Review] SE-0099: Restructuring Condition Clauses

Xiaodi Wu xiaodi.wu at gmail.com
Tue May 31 14:39:16 CDT 2016

```On Tue, May 31, 2016 at 2:32 PM, Christopher Kornher via swift-evolution <
swift-evolution at swift.org> wrote:

>
> > On May 31, 2016, at 1:00 PM, Erica Sadun via swift-evolution <
> swift-evolution at swift.org> wrote:
> >
> >
> >> On May 31, 2016, at 12:52 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
> >> These lines of reasoning are what have compelled me to conclude that
> `where` might not be salvageable.
> >
> > To which, I'd add: `where` suggests there's a subordinate and semantic
> relationship between the primary condition and the clause. There's no way
> as far as I know this to enforce it in the grammar and the proposal allows
> both clauses to be stated even without the connecting word.
>
> OK. I am naive enough to try to informally define a rule that would make
> “where” required and cover all (?) cases in the proposal:
>
> ‘where’ is required after an if-let for any clause involving a variable or
> constant defined in that 'if let. All boolean expressions after the ‘where’
> must reference at least one of constants defined by the ‘if let'
>
> Allowed:
>
> let a = a, b=b where b > 10 && a > 5 && b> a
>
>
> Not allowed:
> …
> let a = a
> let b = b where b > 10 && a > 5
>

Why would this not be allowed by your rule? You're making use of `b` in
your where clause. As I demonstrated above, essentially any assertion can
be rewritten to work around your rule. In general:

```
let y = y where x < z
```

can be trivially (and awfully) rewritten as

```
let y = y where (y.dynamicType == y.dynamicType && x < z)
```

> b > a
> ...
>
> …
> let a = a
> let b = b where b > 10
> a > 5
> b > a
> …
>
> This requires the use of commas because all inter-related ‘if let’
> constants must be associated with a single ‘where'
>
> This makes the use of ‘&&’ more natural, since everything to the right of
> “where” is a boolean expression
>
> The formal grammar is left as an exercise :)
>
> The downside:
>
>         I would not have to answer all the ‘Why won’t this compile?’
> questions on stack overflow. Of course, I would not want to do that for the
> current syntax, either.
>
>
> > You could make a vague argument, I suppose, for renaming `where` to
> `when` but all in all, even killing `where` we benefit with better
> expressive capabilities and a simpler grammar.
> >
> > -- E
> >
> > _______________________________________________
> > swift-evolution mailing list
> > 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/20160531/ecace298/attachment.html>
```