[swift-evolution] [swift-evolution-announce] [Review] SE-0024 "Optional Value Setter `??=`"

Andrew Bennett cacoyi at gmail.com
Wed Feb 17 03:52:54 CST 2016


   - What is your evaluation of the proposal?

-1. Kevin Ballard seems to have covered my reasons quite well.



   - Is the problem being addressed significant enough to warrant a change
   to Swift?

No. Again, Kevin Ballard has covered it. I think it encourages mutability
where it's not necessary, isn't useful without a return value, and
syntactically doesn't add much over `??`.


   - Does this proposal fit well with the feel and direction of Swift?

I think it adds unnecessary syntactic sugar and encourages bad (swift)
practices, which doesn't fit the feel and direction of Swift. I can
understand the desire for it, but every time I've wanted it I have used ??
and preferred the resulting code. The resulting code has felt more Swifty.
I suppose worst-case you can do this: `a = b ?? a`.


   - If you have used other languages or libraries with a similar feature,
   how do you feel that this proposal compares to those?

Other languages I've used have allowed this operator to be chained, used as
a style of lazy-initialization. Using this operator for that doesn't
guarantee that the value is set, and set once, there's better ways to do
that in Swift. Other cases I've seen it were to break expressions over
multiple lines, I think that's noisy, and prone to mistakes when
refactoring.


   - How much effort did you put into your review? A glance, a quick
   reading, or an in-depth study?

Followed the discussion, read the proposal, read the last post (Kevin's).

- Andrew Bennett

On Wed, Feb 17, 2016 at 2:26 PM, Kevin Ballard via swift-evolution <
swift-evolution at swift.org> wrote:

> On Fri, Feb 12, 2016, at 09:15 PM, Douglas Gregor wrote:
>
>
>    - What is your evaluation of the proposal?
>
> -1. If we were to have this operator, then I think `??=` is a good choice
> for it. But I don't think we need this operator. As others have pointed
> out, a lot of the use-cases from other languages don't actually work in
> Swift, and having the operator encourages people to write anti-patterns in
> order to use it, such as making a value into a mutable Optional when it
> really should be an immutable non-optional value.
>
>
>
>    - Is the problem being addressed significant enough to warrant a
>    change to Swift?
>
> No. The need for this sort of operator is much rarer in Swift than it is
> in languages that do have an equivalent (like Ruby).
>
> Anecdotally, I've written a lot of Swift code at this point, and I've
> never wanted this. I have on rare occasion wanted a local "lazy" variable,
> but in those rare instances, the desire was to move the initialization out
> of the main body of the function and up to the declaration, which `??=`
> doesn't help with.
>
>
>
>    - Does this proposal fit well with the feel and direction of Swift?
>
> The choice of operator I think is reasonable, given the existing `??`
> operator, but encouraging the use of Optionals for local variables that
> will end up with a guaranteed-non-Optional value does not.
>
>
>
>    - If you have used other languages or libraries with a similar
>    feature, how do you feel that this proposal compares to those?
>
> The only languages that I know of with a similar operator also return the
> rhs value from the assignment expression, and that's not something Swift
> would do. So this is less useful than the operator in those languages.
>
>
>
>    - How much effort did you put into your review? A glance, a quick
>    reading, or an in-depth study?
>
> A quick reading.
>
> -Kevin Ballard
>
> _______________________________________________
> 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/20160217/ce588f45/attachment.html>


More information about the swift-evolution mailing list