I'm just gonna weigh in with

1) I don't like optionals, I find them intrusive and prefer Objective C's 
message eating nil but whatever.  I've shipped code in C, C++, and Java where 
dereferencing or messaging nil/null is "A Bad Thing (tm)" and its not really a 
driving issue in my coding or design.

2) I REALLY dislike operators.  A lot.  Like - they're punctuation, man.  I can 
barely fathom the default set.  They don't "say" anything to me as I read the 
code - they're syntactic noise.

I *much* prefer meaningful method names.  

if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName).")
} else {
    print("That airport is not in the airports dictionary.")
}

vs (sorry, mixing languages)

airportName := airports at: #DUB ifAbsent: [ "unknown" ]
print("The name of the airport is \(airportName)")

One of these I can read, even as a lay person, and understand.  The other is 
cartoon character cursing.

> On Jan 25, 2017, at 11:39, John McCall via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>> On Jan 25, 2017, at 2:37 PM, Jacob Bandes-Storch <jtban...@gmail.com 
>> <mailto:jtban...@gmail.com>> wrote:
>> If no uses are found (which I suspect will be the case), it becomes hard to 
>> also find evidence of harm other than in contrived scenarios. Perhaps 
>> contrived will be all we can find.
> 
> Well, if there's no harm, having a weird corner case that doesn't hurt 
> anybody is fine.  I certainly suspect that there are use cases for using a 
> non-simple assignment operator there, so calling out = as a special case is a 
> bit weird.
> 
> John.
> 
>> Anyway, this is a bit off-topic for this thread...
>> On Wed, Jan 25, 2017 at 11:24 AM John McCall <rjmcc...@apple.com 
>> <mailto:rjmcc...@apple.com>> wrote:
>>> On Jan 25, 2017, at 1:48 PM, Xiaodi Wu <xiaodi...@gmail.com 
>>> <mailto:xiaodi...@gmail.com>> wrote:
>>> Given lack of evidence of harm, is it really important to make such a 
>>> source-breaking change?
>> 
>> My first instinct is that, no, it's not important.  However, we haven't 
>> actually *tried* to find any evidence of harm, so it's a bit conclusory.  If 
>> someone wants to make an evidence-based argument that it's harmful and that 
>> almost nobody is using it (intentionally/correctly), the balance could swing 
>> the other way.  That's for someone else to prove, though, since yes, at this 
>> point the bias has to be towards leaving things be.
>> 
>> John.
>> 
>>> 
>>> On Wed, Jan 25, 2017 at 12:45 John McCall via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> On Jan 25, 2017, at 1:35 PM, Jacob Bandes-Storch <jtban...@gmail.com 
>>>> <mailto:jtban...@gmail.com>> wrote:
>>>> 
>>>> Agreed, IMO it would be quite dangerous for "a ??= b" to mean anything 
>>>> other than "a = a ?? b".
>>>> 
>>>> On another note, I don't see the value of "a? = b". I had never realized 
>>>> before that this works. Is this feature actually used in the wild? Should 
>>>> we consider removing it? (I could perhaps see some value if the assignment 
>>>> operator were overloadable, but it's not.)
>>> 
>>> The core semantics (that ? on an l-value still produces an l-value) fall 
>>> out from the ability to call a mutating method with a?.foo().  Once you 
>>> have that, you have to decide what it means to put such an l-value to the 
>>> left of an assignment operator, and we decided to make it Just Work™.  I 
>>> agree that it is not a particularly useful operation in idiomatic Swift, 
>>> especially with simple assignment (=), and we could consider just 
>>> disallowing it.
>>> 
>>> It also comes up with optional properties, I think, which is something we 
>>> weren't always certain we were going to ban in native Swift (as opposed to 
>>> imported ObjC code, where they're a fact of life).
>>> 
>>> John.
>>> 
>>>> 
>>>> Jacob
>>>> 
>>>> On Wed, Jan 25, 2017 at 10:28 AM, John McCall <rjmcc...@apple.com 
>>>> <mailto:rjmcc...@apple.com>> wrote:
>>>>> On Jan 25, 2017, at 12:47 PM, Jacob Bandes-Storch via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> Really? My observation from a quick test is that "a? = b" assigns b to a 
>>>>> if a already has a value, or does nothing if it's nil. This is sort of 
>>>>> the opposite of what's being proposed, which is that "a ?= b" should 
>>>>> assign to a only if it does NOT have a value.
>>>> 
>>>> Right.  On the other hand, this does seem like a poor spelling for the 
>>>> operator, given the ease of confusion.
>>>> 
>>>> Also, I'm finding it hard to imagine a use for this where the equivalent 
>>>> ?? invocation wouldn't be *much* clearer.  It just feels like you must be 
>>>> doing something backwards — "I've filled in a default value for this 
>>>> variable, now overwrite it if this other value exists".  Wouldn't the 
>>>> reverse generally be better?
>>>> 
>>>> John.
>>>> 
>>>>> On Wed, Jan 25, 2017 at 9:33 AM Joe Groff via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> 
>>>>> > On Jan 25, 2017, at 8:40 AM, Nichi Shin via swift-evolution 
>>>>> > <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> >
>>>>> > I’d like to propose a new operator for optional assignment in Swift.
>>>>> >
>>>>> > The idea is that by using this operator (e.g. by doing a ?= b), the 
>>>>> > optional on the right would be assigned to the variable on the left 
>>>>> > only when it has something to assign (i.e. when it's not nil).
>>>>> 
>>>>> `a? = b` already does this. Maybe we need a fixit to make that more 
>>>>> apparent, though.
>>>>> 
>>>>> -Joe
>>>>> 
>>>>> >
>>>>> > The implementation could be something as follows:
>>>>> >
>>>>> > /// Optional Assignment Operator
>>>>> > infix operator ?=: AssignmentPrecedence
>>>>> >
>>>>> > func ?=<T>(left: inout T, right: T?) {
>>>>> >     if right != nil {
>>>>> >         left = right!
>>>>> >     }
>>>>> > }
>>>>> >
>>>>> > func ?=<T>(left: inout T?, right: T?) {
>>>>> >     if right != nil {
>>>>> >         left = right
>>>>> >     }
>>>>> > }
>>>>> >
>>>>> > I hope you will consider adding this on a future release of this great 
>>>>> > programming language.
>>>>> >
>>>>> > Kind regards,
>>>>> > N. S.
>>>>> > _______________________________________________
>>>>> > 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