I personally have a strong preference for operators at the end of lines.
The codebase seems to agree with me, judging by some rough grepping ('fff'
is an alias I have that's roughly equivalent to rgrep):

$ fff "&&$" | wc -l
  28907
$ fff "^ *&&" | wc -l
   3751

$ fff "||$" | wc -l
  26429
$ fff "^ *||" | wc -l
   2977

$ fff " =$" | wc -l
  39379
$ fff "^ *= " | wc -l
    629

$ fff " +$" | wc -l
  31909
$ fff "^ *+$" | wc -l
    491

$ fff " -$" | wc -l
   2083
$ fff "^ *-$" | wc -l
     52

$ fff " ==$" | wc -l
  1501
$ fff "^ *== " | wc -l
  161

$ fff " !=$" | wc -l
  699
$ fff "^ *!= " | wc -l
  129

They are rough regexps and probably have some false positives, but the
numbers aren't even close; operators at the end of the line clearly
dominate.

I will conform for the greater good but silently weep inside every time I
see it.

Nick

On Fri, Feb 17, 2017 at 8:47 AM, <gsquel...@mozilla.com> wrote:

> Question of the day:
> When breaking overlong expressions, should &&/|| go at the end or the
> beginning of the line?
>
> TL;DR: Coding style says 'end', I&others think we should change it to
> 'beginning' for better clarity, and consistency with other operators.
>
>
> Our coding style reads:
> "Break long conditions after && and || logical connectives. See below for
> the rule for other operators." [1]
> """
> Overlong expressions not joined by && and || should break so the operator
> starts on the second line and starts in the same column as the start of the
> expression in the first line. This applies to ?:, binary arithmetic
> operators including +, and member-of operators (in particular the .
> operator in JavaScript, see the Rationale).
>
> Rationale: operator at the front of the continuation line makes for faster
> visual scanning, because there is no need to read to end of line. Also
> there exists a context-sensitive keyword hazard in JavaScript; see bug
> 442099, comment 19, which can be avoided by putting . at the start of a
> continuation line in long member expression.
> """ [2]
>
>
> I initially focused on the rationale, so I thought *all* operators should
> go at the front of the line.
>
> But it seems I've been living a lie!
> &&/|| should apparently be at the end, while other operators (in some
> situations) should be at the beginning.
>
>
> Now I personally think this just doesn't make sense:
> - Why the distinction between &&/|| and other operators?
> - Why would the excellent rationale not apply to &&/||?
> - Pedantically, the style talks about 'expression *not* joined by &&/||,
> but what about expression that *are* joined by &&/||? (Undefined Behavior!)
>
> Based on that, I believe &&/|| should be made consistent with *all*
> operators, and go at the beginning of lines, aligned with the first operand
> above.
>
> And therefore I would propose the following changes to the coding style:
> - Remove the lonely &&/|| sentence at [1].
> - Rephrase the first sentence at [2] to something like: "Overlong
> expressions should break so that the operator starts on the following line,
> in the same column as the first operand for that operator. This applies to
> all binary operators, including member-of operators (in particular the .
> operator in JavaScript, see the Rationale), and extends to ?: where the 2nd
> and third operands should be on separate lines and start in the same column
> as the first operand."
> - Keep the rationale at [2].
>
> Also, I think we should add something about where to break expressions
> with operators of differing precedences, something like: "Overlong
> expressions containing operators of differing precedences should first be
> broken at the operator of lowest precedence. E.g.: 'a+b*c' should be split
> at '+' before '*'"
>
>
> A bit more context:
> Looking at the history of the coding style page, a certain "Brendan" wrote
> that section in August 2009 [3], shortly after a discussion here [4] that
> seemed to focus on the dot operator in Javascript. In that discussion,
> &&/|| appear in examples at the end of lines and nobody talks about that
> (because it was not the main subject, and/or everybody agreed with it?)
>
> Discuss!
>
>
> [1] https://developer.mozilla.org/en-US/docs/Mozilla/Developer_
> guide/Coding_Style#Control_Structures
> [2] https://developer.mozilla.org/en-US/docs/Mozilla/Developer_
> guide/Coding_Style#Operators
> [3] https://developer.mozilla.org/en-US/docs/Mozilla/Developer_
> guide/Coding_Style$compare?locale=en-US&to=7315&from=7314
> [4] https://groups.google.com/d/msg/mozilla.dev.platform/
> Ji9lxlLCYME/zabUmQI9S-sJ
> _______________________________________________
> dev-platform mailing list
> dev-platform@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-platform
>
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to