[swift-evolution] ternary operator ?: suggestion

Austin Zheng austinzheng at gmail.com
Tue Dec 15 00:22:33 CST 2015


I am strongly against this proposal.

In terms of clarity: Paul Cantrill made the very good point in a different
thread that "beginner-friendly" syntax may not be the same as syntax
optimized for the productivity of developers working on serious projects. I
think this is a great example of that principle in action. Sigils stand out
to the eye when scanning code in a way that keywords don't, even in an IDE
with syntax highlighting (and the perils of relying upon relying upon color
have been discussed pretty thoroughly in the mandatory 'self' thread).
Replacing them with keywords makes it harder to delineate the arguments.

In terms of semantics: The argument was made earlier that "?" is associated
closely with optionals and not suitable for this purpose; I disagree: "?"'s
overarching meaning is that of uncertainty or querying, which makes sense
both in terms of control flow (predicate determines which way to go), as
well as optionals (whose 'empty or not' status is unknown until explicitly
checked for, e.g. via if-let).

In terms of beginner-friendliness: I don't think the ternary symbols are
particularly difficult to learn. The operators show up in other languages
as well and the actual usage rules are very simple. On the other hand, I
don't think having two related-but-distinct forms of if-else, or mangling
multi-line if-else into a form quite dissimilar to those of other languages
(or of the other control flow constructs in Swift) is helpful to people
learning the language.

My personal preference is to hold a separate discussion as to whether or
not we should have expression variants of the if, switch, and other control
flow statements, but even so I don't see them as a replacement for
single-line expressions using the ternary operator being discussed.

Best,
Austin

On Mon, Dec 14, 2015 at 4:50 PM, Nick Shelley via swift-evolution <
swift-evolution at swift.org> wrote:

> I however frequently hear people saying ternary should be avoided because
>> they are hard to read or they hate them.
>
>
> FWIW, I used to be one of those people, but then started working on a team
> where one member liked them. He didn't force them on us, but after enough
> code reviews where he showed us how to turn 5-line if/else statements into
> simple one-line ternary expressions, I got used to reading them and now
> love them and use them often.
>
> People also hate map, flatMap, reduce, etc., for the same reasons (it's
> hard for them to read because it's not the for loop they're used to). I
> think it's a simple matter of getting used to it.
>
> On Mon, Dec 14, 2015 at 11:57 AM, Chris Lattner via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>>
>> On Dec 14, 2015, at 12:19 AM, Paul Ossenbruggen via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> Once again, thank you for all the feedback, if I sound in anyway grumpy
>> in responding to any email, it has a bit more to do with my cold than the
>> suggestions.
>>
>> I have split the original proposal into two proposals and incorporated a
>> bunch of feedback. Splitting it up has been extremely good, not only does
>> it improve readability, I am actually finding I could take or leave the
>> ternary replacement idea. But the proposal will be there if enough everyone
>> thinks it is a good idea. We could put it to a vote to see if there is
>> enough interest and I would be happy to take it further if there is. I
>> suspect this thread would not exist at all if there was no interest in it.
>> However, I am finding I am far more interested in getting switch
>> expressions.
>>
>> Ternary Replacement
>> https://github.com/possen/swift-evolution/blob/master/0021.md
>>
>>
>> Quick comment.  The proposal states:
>>
>>
>> Is it really better? Why not just keep ternary expressions?
>> This is a valid question, there is an advantage in compactness to ternary
>> expressions. I however frequently hear people saying ternary should be
>> avoided because they are hard to read or they hate them. There seems to
>> many who either stronly dislike it or don't care.
>>
>>
>> However, it doesn’t actually show that it is solving the objections
>> people have to the ternary operator.  It is true that some people find the
>> ?: syntax weird, but an equal number of people say that the problem is that
>> you’re putting complex conditional logic inline into the middle of an
>> expression - this proposal actually makes that objection worse.  There are
>> also other objections to ?:, and until you enumerate them, it is hard to
>> see whether this proposal is making things better or worse.
>>
>> -Chris
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
>
> _______________________________________________
> 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/20151214/a3941b4a/attachment.html>


More information about the swift-evolution mailing list