[swift-evolution] ternary operator ?: suggestion

Charles Constant charles at charlesism.com
Thu Jan 14 15:16:56 CST 2016


Hi Craig,

Well done, what you wrote looks pretty good to me. I had no trouble
understanding the proposal. It's a good length, too - I think the shorter
we can make it, the more appealing it is.

The only section that I think needs improvement is "Motivation." I think we
could sell it better. I know when I've read some of the other proposals, I
do it in fairly cursory way.
"Motivation" could be clearer for those of our peers who haven't followed
the thread.

The motivation, from my point of view:
- the need to use a value from one domain, as a "key" to another is very
common. The ternary is a special case of this, and for all it's flaws, it's
a very popular expression in multiple languages
- using the existing "switch" to do this is bloated (more so in Swift
because you have to declare the variable before the switch statement)
- using the existing "switch" to do this is less safe, because unrelated
code can be inserted in the case statements
- current alternatives to "switch" aren't good (e.g.: using a Dict has
quirks that add the cognitive load)
- this new "map" method can make code less verbose, easier to read, and
safer

















On Thu, Jan 14, 2016 at 11:23 AM, Craig Cruden <ccruden at novafore.com> wrote:

> Paul,
>
> I tried to put my understanding on the latest proposal option into a draft
> on github (instead of my usual BitBucket repo).
>
> Take a look at it and see if there is anything useable.
>
>
> https://github.com/cacruden/swift-evolution/blob/master/proposals/0000-Pattern-Matching-Partial-Function.md
>
> Craig
>
> On 2016-01-11, at 14:17:09, Craig Cruden <ccruden at novafore.com> wrote:
>
> Ignore the last comment - tired and mistaken. :p
>
>
> On 2016-01-11, at 14:16:01, Craig Cruden <ccruden at novafore.com> wrote:
>
> I just realized “cases” probably is not needed - if it see’s a comma after
> case but before “:” then it is the concise form.
>
> If the switch / case can do that , the partial function case should be
> able to do the same thing.
>
>
> On 2016-01-11, at 13:23:19, Craig Cruden <ccruden at novafore.com> wrote:
>
> I have thought about it a bit more and I think this would cover all the
> cases that interest me (in addition to others needs for a little more
> conciseness on the most simple case).
>
> I also think we need to be clear that the “case” (or cases) and “default”
> are is really just a partial function which in it’s entirety is really just
> a complete function for used wherever a complete function (exhaustive) can
> be passed (e.g. reduce, filter, etc.) - otherwise they might get confused
> on why we are adding it to “map”.
>
> The optional where clause should also be part of the case clause as part
> of the proposal.
>
> There would be no need for statement based “fallthrough”.
>
> You mentioned your proposal….  have you drafted a formal proposal draft?
>
>
>
> On 2016-01-10, at 12:41:03, Paul Ossenbruggen via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> I agree that it would be really useful to keep things concise. I am going
> to suggest again an idea I had in the past, it is also in my proposal,
> which might work well for this problem. This might address the verbosity of
> the “case” and at the same time make it obvious we are dealing with a
> switch expression. So both would be valid:
>
> * let num = color.map {*
>
> * cases .Red: 100, *
> * .Green:  200, *
> * .Blue: 300*
> * default: -1 *
> * }*
> * let num = color.map {*
> * case .Red: 100*
> * case .Green:  200 *
> * case .Blue: 300*
> * default: -1 *
> * }*
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160114/4532a9e2/attachment.html>


More information about the swift-evolution mailing list