[swift-evolution] Nil coalescing operator precedence
Vladimir.S
svabox at gmail.com
Wed Jun 15 11:07:22 CDT 2016
> If precedence between two operators is undefined, we cannot omit
> parentheses.
Hm.. Probably the initial problem could be solved with this? I.e. if we'll
have *no* defined precedence between math operators and between ?? and
between ?: (and probably something else?) ?
As for rules of precedence, I think it is really not important what
precedence will be assigned for ??/?: as in any case IMO most devs will not
remember this for sure in situation when one need to write/read such
complex expression.
For me, probably I have some extreme opinion: if we have a mix of operators
from different domains (math and ?? for example) we need parentheses to
exclude any kind of ambiguity.
On 15.06.2016 17:53, Антон Жилин wrote:
> Nice points, I also think that unless operators are from the same domain,
> more parentheses is better.
> Other than that, what rules do we need? I can name these:
> 1. Assignment operators have lower precedence than most operators
> 2. Arithmetics has higher precedence than comparative and logical
> operators. I don't think that ?? belongs to arithmetics, it's more like
> control flow.
> 3. Unary operators obviously have higher precedence than everything
>
>> I didn't read se-0077 in details, so have no opinion. Probably you can
> describe main ideas of it here in two words.
> Replace numeric precedence with precedence relationships between pairs of
> operators. If precedence between two operators is undefined, we cannot omit
> parentheses.
>
> My thought was basically: "parentheses between some operators must be
> enforced by the language" <=> "SE-0077 is needed"
>
> - Anton
>
> 2016-06-15 17:17 GMT+03:00 Vladimir.S <svabox at gmail.com
> <mailto:svabox at gmail.com>>:
>
>
> On 15.06.2016 16:43, Антон Жилин via swift-evolution wrote:
>
> `b + c * d / e` is not, obviously.
>
>
> obviously, for math operators it seems like we don't need any
> clarifications
>
> `a ? b : c + x + y` -- I'd also say not, because, well, it's ternary
> operator, the special case that everyone should know (otherwise it
> looks
> like a mess with ? and : operators).
>
>
> Yes, it's ternary operator. But is it
> a ? b : (c + x + y)
> or
> (a ? b : c) + x + y
>
> IMO ambiguous.
>
> `a ?? x + y + z` -- maybe. If not for analogies with || and && and
> knowing
> about @autoclosure, I'd say that priority of ?? should be very high.
>
>
> The same, is it
> a ?? (x + y + z)
> or
> (a ?? x) + y + z
>
> ? I.e. I'm not asking, just show that the question is not if we know
> what does ?? mean, but how all the expression will be treated.
>
> IMO it's totally false assumption that most of developers(and poor
> beginners) do remember the the correct precedence in such expressions
> and in most cases will not make a bug and so we should not require the
> parentheses. Imagine how each such expression will be crystal clear
> about the order of processing in *any* Swift source code you could find
> anywhere. IMO this will be great advantage of the language.
>
> Now that I think about it, if job of SE-0077 could be done with a
> linter,
> then... do we still need it?
>
>
> I didn't read se-0077 in details, so have no opinion. Probably you can
> describe main ideas of it here in two words.
>
>
> - Anton
>
> 2016-06-15 16:00 GMT+03:00 Vladimir.S <svabox at gmail.com
> <mailto:svabox at gmail.com>
> <mailto:svabox at gmail.com <mailto:svabox at gmail.com>>>:
>
> As I understand, the question is if
>
> `a ?? x + y + z`
> and
> `a ? b : c + x + y`
> (or `b + c * d / e`)
>
> an "ambiguous case" ?
>
>
> On 15.06.2016 15:42, Антон Жилин via swift-evolution wrote:
>
> It's tempting to mention SE-0077 in this context. If it's
> accepted,
> we will
> be able to make omission of parentheses an error in
> ambiguous cases.
>
> - Anton
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> <mailto:swift-evolution at swift.org>
> <mailto:swift-evolution at swift.org <mailto:swift-evolution at swift.org>>
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
More information about the swift-evolution
mailing list