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

Xiaodi Wu xiaodi.wu at gmail.com
Tue May 31 14:59:44 CDT 2016

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

>
> On May 31, 2016, at 1:47 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
>
>
>
> On Tue, May 31, 2016 at 2:45 PM, Christopher Kornher via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>>
>>> 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:
>>
>>
>> It is not allowed because  ‘a’ is defined in the line above. It must be
>> defined in the ‘if let’ associated with the where in which it is mentioned.
>>
>
> That's a much more restrictive where clause than you proposed earlier.
> You'd not be able to write:
>
> ```
> let b = b where b > anyOtherVariable
> ```
>
>
> The definition is not a formal one, but that was the intent.
>
> ```
> let b = b where b > anyOtherVariable
> ```
>
> is legal as long as `anyOtherVariable` is not defined within the entire
> condition clause
>

You can propose that rule, but it doesn't solve the issue. If, today, I've
got

```
let x = 1
let y: Int? = 2
let z = 3

if let y = y where x < z {
// do stuff
}
```

```
if let y = y where y == y && x < z {
// do stuff
}
```

The point is, the semantic relationship between what comes before and after
`where` exists in the mind of the human reader only.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160531/6011a8b6/attachment.html>
```