[swift-evolution] Allow let binding of non-optionals
James Campbell
james at supmenow.com
Fri Jan 8 02:45:43 CST 2016
I think in the second case the compiler could give you a warning.
Sent from my iPhone
> On 7 Jan 2016, at 18:59, Jacob Bandes-Storch via swift-evolution <swift-evolution at swift.org> wrote:
>
> Well, I don't think it should be universally allowed.
>
> Consider:
>
> if let value = getValue() {
> // do something with value
> }
>
> If getValue() returns an optional, this is fine. But if it's non-optional, then you've introduced an "if" when there really is no conditional control flow happening. This should still be a compiler error.
>
> It gets trickier when you mix optional and non-optional values:
>
> if let value1 = somethingOptional(),
> let value2 = somethingNonOptional()
> {
> // should this be allowed?
> }
>
>
> if let value1 = somethingNonOptional(),
> let value2 = somethingOptional()
> {
> // How about this?
> }
>
> Here's an alternative idea: allow non-optional bindings in "do" blocks:
>
> do let value = somethingNonOptional() {
> // use value
> } // value is out of scope now
>
>
> And perhaps you could combine them with if-statements:
>
> if let value1 = somethingOptional(),
> do let value2 = somethingNonOptional()
> where value2 < value1
> {
> // use the values
> }
>
>
> Jacob Bandes-Storch
>
>> On Thu, Jan 7, 2016 at 10:41 AM, Gwendal Roué <swift-evolution at swift.org> wrote:
>> +1.
>>
>> `if let` does two things: 1. unwrap the optional, 2. define a new variable, scoped to the `if` statement.
>>
>> Sometimes we don’t need the unwrapping, but we’d like the new, temporary, scoped variable.
>>
>> Gwendal
>>
>>
>> > Le 7 janv. 2016 à 07:40, Russ Bishop via swift-evolution <swift-evolution at swift.org> a écrit :
>> >
>> > I often want to bind variables to a specific scope, or perhaps I have three optionals I want to bind and one non-optional. (Often I need that non-optional value as part of a where condition check but not being able to bind it means I leak the variable to the outer scope).
>> >
>> > Not being able to bind non-optionals breaks the flow of the code and forces me to make a minor context switch when it really doesn’t matter, nor does it aid code clarity.
>> >
>> >
>> > Does anyone have strong thoughts about this? I tried searching the evolution repo and the mailing list and didn’t see anything.
>> >
>> >
>> > —russ
>> > _______________________________________________
>> > 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
>
>
> _______________________________________________
> 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/20160108/d0978243/attachment.html>
More information about the swift-evolution
mailing list