Browse Groups

• ## RE: [jslint] Re: Ternary Indentation Question

(8)
• NextPrevious
• ... ~~~~ use strict ; ~~~~return x === 1 ~~~~~~~~? one ~~~~~~~~: x === 2 ~~~~~~~~? two ~~~~~~~~: x === 3 ~~~~~~~~? three ~~~~~~~~: x === 4 ~~~~~~~~?
Message 1 of 8 , Jan 18, 2012
View Source
--- 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
• ... case is not a statement. It is a switch level. You should take JSLint s advice.
Message 1 of 8 , Jan 18, 2012
View Source
--- 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.
• ... 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
View Source
--- 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
• ... 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 1 of 8 , Jan 18, 2012
View Source
> 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.
• Changes have not been saved
Press OK to abandon changes or Cancel to continue editing
• Your browser is not supported
Kindly note that Groups does not support 7.0 or earlier versions of Internet Explorer. We recommend upgrading to the latest Internet Explorer, Google Chrome, or Firefox. If you are using IE 9 or later, make sure you turn off Compatibility View.