Loading ...
Sorry, an error occurred while loading the content.

[jslint] Re: Ternary Indentation Question

Expand Messages
  • spence.randall@ymail.com
    ... Thanks Rob, I agree switch makes more sense, but the question was on the indention expected, not the function itself. I just quickly created that one to
    Message 1 of 8 , Jan 18, 2012
    • 0 Attachment
      --- In jslint_com@yahoogroups.com, "Rob Richardson" <erobrich@...> wrote:
      >
      > --- In jslint_com@yahoogroups.com <mailto:jslint_com%40yahoogroups.com> ,
      > douglascrockford wrote:
      >
      > --- In jslint_com@yahoogroups.com <mailto:jslint_com%40yahoogroups.com> ,
      > "spence.randall@" <randall@> wrote:
      >
      > > Given the following example code:
      > >
      > > function test(x) {
      > > ~~~~'use strict';
      > > ~~~~return x === 1 ? 'one' :
      > > ~~~~~~~~x === 2 ? 'two' :
      > > ~~~~~~~~~~~~x === 3 ? 'three' :
      > > ~~~~~~~~~~~~~~~~x === 4 ? 'four' : 'zero'; }
      >
      > > I would write it this way:
      >
      > > function test(x) {
      > ~~~~'use strict';
      > ~~~~return x === 1
      > ~~~~~~~~? 'one'
      > ~~~~~~~~: x === 2
      > ~~~~~~~~? 'two'
      > ~~~~~~~~: x === 3
      > ~~~~~~~~? 'three'
      > ~~~~~~~~: x === 4
      > ~~~~~~~~? 'four'
      > ~~~~~~~~: 'zero';
      > }
      >
      > > The placement of ? and : makes it easier to read them as then and else if.
      >
      > If the point is clarity, this is much clearer:
      >
      > function test(x) {
      > ~~~~'use strict';
      > ~~~~var y = 'zero';
      > ~~~~switch(x) {
      > ~~~~~~~~case 1:
      > ~~~~~~~~~~~~y = 'one';
      > ~~~~~~~~~~~~break;
      > ~~~~~~~~case 2:
      > ~~~~~~~~~~~~y = 'two';
      > ~~~~~~~~~~~~break;
      > ~~~~~~~~case 3:
      > ~~~~~~~~~~~~y = 'three';
      > ~~~~~~~~~~~~break;
      > ~~~~~~~~case 4:
      > ~~~~~~~~~~~~y = 'four';
      > ~~~~~~~~~~~~break;
      > ~~~~~~~~default:
      > ~~~~~~~~~~~~y = 'zero';
      > ~~~~~~~~~~~~break; // Technically not needed
      > ~~~~}
      > ~~~~return y;
      > }
      >
      > After making this change, JSLint will note that "switch" and "case" should
      > be at the same indentation level.
      >
      > Rob
      >

      Thanks Rob, I agree switch makes more sense, but the question was on the indention expected, not the function itself. I just quickly created that one to illustrate JSLint's message.

      -Randall
    • Marc Spoor
      ... I was under the impression that a line that starts with the return statement should end with a semicolon, in order to not give the interpreter a chance to
      Message 2 of 8 , Jan 18, 2012
      • 0 Attachment
        > I would write it this way:
        >
        > function test(x) {
        > ~~~~'use strict';
        > ~~~~return x === 1
        > ~~~~~~~~? 'one'
        > ~~~~~~~~: x === 2
        > ~~~~~~~~? 'two'
        > ~~~~~~~~: x === 3
        > ~~~~~~~~? 'three'
        > ~~~~~~~~: x === 4
        > ~~~~~~~~? 'four'
        > ~~~~~~~~: 'zero';
        > }
        >
        > The placement of ? and : makes it easier to read them as then and else if.

        I was under the impression that a line that starts with the return
        statement should end with a semicolon, in order to not give the
        interpreter a chance to mess it up.

        I can't test it in IE6 right now, but isn't it conceivable that a dull
        browser would turn the above function into "return x===1;"?

        Or does the "'use strict';" prevent that sort of misguided benevolence?
      Your message has been successfully submitted and would be delivered to recipients shortly.