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

[jslint] Re: Ternary Indentation Question

Expand Messages
  • douglascrockford
    ... case is not a statement. It is a switch level. You should take JSLint s advice.
    Message 1 of 8 , Jan 18, 2012
    • 0 Attachment
      --- In jslint_com@yahoogroups.com, "Rob Richardson" <erobrich@...> wrote:
      > 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.

      case is not a statement. It is a switch level. You should take JSLint's advice.
    • 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 2 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 3 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.