> On May 2, 2016, at 1:08 PM, David Waite via swift-evolution 
> <[email protected]> wrote:
> 
>> The reason is simple: most developers don’t grok pattern matching.  
>> Particularly for people new to swift, “if let” is taught as a magic for 
>> dealing with optionals (which it is). This is a very useful mechanic when 
>> working in Swift, and this way of thinking is fine.  Optionals are very 
>> prominent, and having special sugar for dealing with them is important, even 
>> as people grow to become swift experts in time.
>> 
>> Going with the proposal would definitely simplify the language ('if case’ 
>> could probably go away), but would force everyone, all the time, to think 
>> about pattern matching.  This would be a barrier to entry that many 
>> programmers should never have to face.  The fact that many people don’t 
>> think about things in terms of pattern matching is the root cause for the 
>> comments about “it seems weird that the question mark is on the LHS of the 
>> assignment”.
>> 
>> Finally, some may argue that making pattern matching more prominent would 
>> help teach pattern matching and get more people to use it.  That may be 
>> true, but our goal here is to build a pragmatic language that helps people 
>> get things done, not push to one specific language feature.  I personally 
>> love pattern matching (and was the one who drove and implemented the Swift 2 
>> pattern matching enhancements), but it is an esoteric and special case 
>> feature.  It makes sense for it to be “buried” under “if case”: those who 
>> are unfamiliar with the syntax have something they can google for.
>> 
> My issue is that while one needs to have a special behavior in this case to 
> combine conditional logic and variable assignment, the current shorthand is 
> nonintuitive/inconsistent. The current syntax makes it look like you are 
> saying “let y=x”, and that now assignment has different behaviors if you are 
> inside or outside a conditional. Why does assignment sometime cast off 
> optionality?
> 
> let x:Optional = 1 // x: Int? = 1
> 
> if let y = x { 
>      print(y.dynamicType) // Int
> } 
> let y = x
> print(y.dynamicType) // Optional<Int>
> 
> If there were a syntax like “if let y = some x”, then it would be clear that 
> there is more to this statement than an assignment, it would make it clearer 
> why you can’t cast off optionality on other assignments, as well as possibly 
> being a segue to learning about full pattern matching.
> 
> -DW
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution


This to me is the most bizarre thing about the if-let construct. Elsewhere in 
the language ? indicates conditional unwrapping.

This would make more sense to me:

if let y = x? { 
     print(y.dynamicType) // Int
} 

My issue with the proposed pattern matching syntax is that it looks like 
assignment, which I think confuses people. This is one thing that the current 
case syntax helps to mitigate.

if let y? = x { 
     print(y.dynamicType) // Int
}

Not that I’m suggesting this exactly, but the for-loop syntax works well. Maybe 
there is a more clear pattern matching syntax?

if let y? in x { 
     print(y.dynamicType) // Int
}
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to