interestingly enough, it looks like a truly simple task... the grammar has 2 
types of BindingKind at that location BK_Let and BK_Var, which means that a 
single shorthand notation will assume one of the other, which means that if it 
does assume one, then it better be explicit about it, or alternatively there 
ought to be 2 shorthands for the 2 binding kinds. i.e. :

if unwrapped_var xxxx {
}

and 

if unwrapped_let xxxx {
}

or perhaps even easier to express as:

if let! xxxx {
   // xxxx is unwrapped LET
}

and 

if var! xxxx {
   // xxxx is unwrapped VAR
}

>From what I could understand of the compiler, these would seem like localized 
>small scale changes, but unfortunately still entirely out of the scope of 3.0 
>( not to mention probably still not bringing the clarity chris identified as 
>main blocker).

Ideas like this one, that are both simple in scope but out of the main focus 
might still be worth collecting somewhere as a series of  “if you would like to 
get familiar with the compiler codebase to try and help at a future date with 
more serious items, we suggest that you look into finding the least intrusive 
way to implement any of these features.. we guaranty that there is a simple way 
to build them”. They might prove a good training ground for would be helpers.


Apologies for taking your time.
/LM


> On May 17, 2016, at 5:48 PM, Matthew Johnson via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On May 17, 2016, at 10:41 AM, Brandon Knope <bkn...@me.com 
>> <mailto:bkn...@me.com>> wrote:
>> 
>> I always thought a new keyword made more sense here:
>> 
>> if let rebind someValue { 
>>      //use shadowed unwrapped value in here
>> }
>> 
>> if let bind someValue {
>>      //use shadowed unwrapped value in here
>> }
>> 
>> 
>> if let unwrapped someValue {
>> 
>> }
>> 
>> Something along those lines?
> 
> I wouldn’t want to see something like this replace the existing `if let` 
> because it doesn’t handle cases where you bind a new name to the result of an 
> expression that returns an optional.
> 
> If we did consider something like this it would be simple syntactic sugar for 
> `if let x = x`.  Being syntactic sugar for something that is already not too 
> bad means it would need to be as concise as possible.  If you want to 
> advocate something like this, maybe consider just `if unwrap`:
> 
> if unwrap someValue {
> }
> 
> 
> 
>> 
>> Brandon
>> 
>> 
>>> On May 17, 2016, at 11:31 AM, Patrick Smith via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> Here’s a idea, what if you could use a symbol to denote that you want the 
>>> same name used?
>>> 
>>> Here’s an interesting sign from music: 
>>> https://en.wikipedia.org/wiki/Repeat_sign 
>>> <https://en.wikipedia.org/wiki/Repeat_sign>
>>> 
>>> Then you can write (one) of these:
>>> 
>>> if let |: = mySomeValue {
>>>   // Use unwrapped
>>> }
>>> 
>>> if let mySomeValue = :| {
>>>   // Use unwrapped
>>> }
>>> 
>>> Not sure which one is more clear. Just a totally random idea! I’m not sure 
>>> about the above symbols, but it would help in other places too from memory 
>>> to not have to write the same variable name twice.
>>> 
>>>> On 18 May 2016, at 1:18 AM, Matthew Johnson via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>>> 
>>>>> On May 17, 2016, at 10:13 AM, Tony Allevato via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> 
>>>>> While I've sometimes (early on) wished for a shorter-hand syntax for that 
>>>>> construct, I've never been able to think of something that I thought was 
>>>>> better. I've gotten to the point where I don't particularly mind it 
>>>>> anymore.
>>>>> 
>>>>> Regarding the exclamation point specifically, seeing one of those in an 
>>>>> expression context says to me "this thing will die horribly if it is 
>>>>> nil/throws an error". Using it in this context where that's not the case 
>>>>> would probably go against users' expectations.
>>>> 
>>>> Agree.  If we are going have syntax similar to pattern matching it should 
>>>> be the same as pattern matching.  This would mean using ‘?' rather than 
>>>> ‘!’.  However, we already have generalized pattern matching with `if case` 
>>>> for that.  This topic has been debated extensively.
>>>> 
>>>>> 
>>>>> 
>>>>> On Tue, May 17, 2016 at 8:05 AM Vladimir.S via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> On 17.05.2016 16:51, Johan Jensen wrote:
>>>>>  > This was one of the first and most commonly suggested ideas, when the 
>>>>> Swift
>>>>>  > Evolution mailing list first started.
>>>>>  > Chris Lattner sums it up
>>>>>  >
>>>>> <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/003546.html
>>>>>  
>>>>> <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/003546.html>>
>>>>>  > in one of those threads:
>>>>>  >
>>>>>  >> This is commonly requested - the problem is that while it does help
>>>>>  > reduce boilerplate, it runs counter to the goal of improving clarity.
>>>>>  >
>>>>>  > — Johan
>>>>> 
>>>>> Oh, thank you for letting this know.
>>>>> 
>>>>> Well, I totally disagree with Chris. And as soon as there was no 
>>>>> 'official'
>>>>> proposal and 'official' decision, I'd like to discuss this more.
>>>>> 
>>>>> I saw a lot of code like
>>>>> if let mySomeValue = mySomeValue {} in sources and even in books.
>>>>> Plus, I really believe that
>>>>> if let mySomeValue! {..} is better in any way: readability, less space for
>>>>> errors(when you need to repeat the same name) etc
>>>>> 
>>>>> FWIW, I suggest more explicit variant:
>>>>> if let value! {...} // with exclamation mark
>>>>> In that "old" proposal there was `if let value {...}`, was not so clear.
>>>>> 
>>>>> I can't accept an argument that you can use another name - as usually
>>>>> 'good' name is already 'crafted' for the instance and you want to use it 
>>>>> in
>>>>> next code.
>>>>> Otherwise, we need a 'best practice' to name optional variables with some
>>>>> prefix or suffix like : mySomeValueOpt, then `if let mySomeValue =
>>>>> mySomeValueOpt` will have a sense. But as I understand, we don't want to
>>>>> use such approach.
>>>>> Additionally, when you shadow optional value with same name - you are
>>>>> *protecting* yourself from using optional value inside block of unwrapped
>>>>> code. IMO it is a good idea.
>>>>> And want we or don't want, we already have this practice widely. So I
>>>>> believe this(my) proposal will improve the code.
>>>>> 
>>>>> I'd like to get opinion of the community regarding this feature.
>>>>> 
>>>>> On 17.05.2016 16:51, Johan Jensen wrote:
>>>>> > This was one of the first and most commonly suggested ideas, when the 
>>>>> > Swift
>>>>> > Evolution mailing list first started.
>>>>> > Chris Lattner sums it up
>>>>> > <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/003546.html
>>>>> >  
>>>>> > <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/003546.html>>
>>>>> > in one of those threads:
>>>>> >
>>>>> >> This is commonly requested - the problem is that while it does help
>>>>> > reduce boilerplate, it runs counter to the goal of improving clarity.
>>>>> >
>>>>> > — Johan
>>>>> >
>>>>> > On Tue, May 17, 2016 at 3:43 PM, Vladimir.S via swift-evolution
>>>>> > <swift-evolution@swift.org <mailto:swift-evolution@swift.org> 
>>>>> > <mailto:swift-evolution@swift.org <mailto:swift-evolution@swift.org>>> 
>>>>> > wrote:
>>>>> >
>>>>> >     It is common to shadow optional value name with unwrapped value with
>>>>> >     same name:
>>>>> >
>>>>> >     if let someGoodValue = someGoodValue {...}
>>>>> >
>>>>> >     What if we'll have a syntax to not repeat the variable name to 
>>>>> > achieve
>>>>> >     the same target:
>>>>> >
>>>>> >     if let someGoodValue! {...}
>>>>> >
>>>>> >     What do you think?
>>>>> >     _______________________________________________
>>>>> >     swift-evolution mailing list
>>>>> >     swift-evolution@swift.org <mailto:swift-evolution@swift.org> 
>>>>> > <mailto:swift-evolution@swift.org <mailto:swift-evolution@swift.org>>
>>>>> >     https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> > <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>> >
>>>>> >
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to