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

Xiaodi Wu xiaodi.wu at gmail.com
Tue May 31 20:47:11 CDT 2016

Revisiting this conversation, it seems that most of the design space has
been thoroughly explored. I think all suggestions presented so far boil
down to these:

Q: How is an arbitrary boolean assertion introduced after `if let`?

Option 1 (present scenario)--using `where`
Advantages: expressive when it means exactly the right thing
Drawbacks: makes obligatory the suggestion of a semantic relationship
between what comes before and after even when there is no such relationship

Option 2--using a symbol sometimes encountered in conditional statements
(e.g. `&&` or comma)
Advantages: doesn't look out of place
Drawbacks: needs to be disambiguated from existing uses, necessitating
other changes in syntax

Option 3--using a symbol never encountered in conditional statements (e.g.
Advantages: doesn't need to be disambiguated from any existing uses
Drawbacks: looks out of place

For me, options 1 and 2 have permanent and objective drawbacks. By
contrast, familiarity increases with time, and beauty is in the eye of the

* * *

It does occur to me that there is one more option. I don't know that I like
it, but it's an option no one has put forward before: recite the opening
keyword when beginning a new boolean expression:

`if let x = x where x < 3 { ... }` becomes
`if let x = x if x < 3 { ... }`

`while let item = sequence.next() where item > 0 { ... }` becomes
`while let item = sequence.next() while item > 0 { ... }`


On Tue, May 31, 2016 at 2:00 PM, Erica Sadun <erica at ericasadun.com> 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. 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160531/575f3029/attachment.html>

More information about the swift-evolution mailing list