[swift-evolution] Brainstorming: Optional sugar inferred map
tvermeulen
tvermeulen at me.com
Tue Feb 16 08:10:45 CST 2016
But wouldn’t you say optional chaining is almost the same thing? I’m a bit puzzled why people say this new proposal makes the code confusing, while the current implementation of optional chaining isn’t frowned upon.
let a: String? = "123"
let b: String = "456"
let c = a?.stringByAppendingString(b)
This works as expected.
let a: String = "123"
let b: String? = "456"
let c = a.stringByAppendingString(b?)
This, however, does not work. I think the only reason the second example seems a bit off is because we’re not used to it, but both seem equally readable to me. The second example is basically equivalent to this:
let a: String = “123”
let b: String? = “456”
let c = b?.stringByPrependingString(a)
Which would work, if only there is no such function. I guess the point I’m trying to make is that currently, whether we have to use a lot of boilerplate code depends on the choice of receiver and argument of the function, which could be completely arbitrary.
> > To address this, the nil-coalescing operator would allow $$, where $$ is the unwrapped unnamed result of the expression when non nil:
> >
> > func doSomething(value: Int) ->Int {
> > return value
> > }
> >
> > let ra = a ?? doSomething($$)
> > let rc = c ?? doSomething($$)
> >
> > ra ->5
> > rc ->nil
> I think this is completely the wrong way to approach this.
>
> *If* you want to implement this feature, I think the way to do it is to say that you can put ? after any optional parameter to a normal function call, and Swift will unwrap all the parameters so marked and make the call return `nil` if any of them are nil.
>
> let ra = doSomething(a?)
> let rc = doSomething(c?)
>
> Naturally, since operators are just function calls with a funny syntax, this would also extend to operators.
>
> a? + b // a.k.a. +(a?, b)
>
> Even in this form, however, I don't think this is a feature worth having. Too indirect and specialized.
>
> --
> Brent Royal-Gordon
> Architechies
>
>
>
>
More information about the swift-evolution
mailing list