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
> <[email protected]> wrote:
>
>> On Jan 25, 2017, at 2:37 PM, Jacob Bandes-Storch <[email protected]
>> <mailto:[email protected]>> 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 <[email protected]
>> <mailto:[email protected]>> wrote:
>>> On Jan 25, 2017, at 1:48 PM, Xiaodi Wu <[email protected]
>>> <mailto:[email protected]>> 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
>>> <[email protected] <mailto:[email protected]>> wrote:
>>>> On Jan 25, 2017, at 1:35 PM, Jacob Bandes-Storch <[email protected]
>>>> <mailto:[email protected]>> 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 <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>> On Jan 25, 2017, at 12:47 PM, Jacob Bandes-Storch via swift-evolution
>>>>> <[email protected] <mailto:[email protected]>> 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
>>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>>>
>>>>> > On Jan 25, 2017, at 8:40 AM, Nichi Shin via swift-evolution
>>>>> > <[email protected] <mailto:[email protected]>> 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
>>>>> > [email protected] <mailto:[email protected]>
>>>>> > https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>> > <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>>
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> [email protected] <mailto:[email protected]>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> [email protected] <mailto:[email protected]>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>
>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution