Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP vs. JavaScript switch indentation

While I realize that each language has its own convention for indentation, I can't help but be annoyed with something I've recently discovered. Consider this code from the PHP manual:

switch ($i) {
    case "apple":
        echo "i is apple";
        break;
    case "bar":
        echo "i is bar";
        break;
    case "cake":
        echo "i is cake";
        break;
}

Notice that each case is indented from the switch statement. This makes sense, as the code is easier to read and the body of the block is contained one level inside of it.

However, when I test the equivalent JavaScript switch statement in JSLint:

switch (i) {
    case "apple":
        alert("i is apple");
        break;
    case "bar":
        alert("i is bar");
        break;
    case "cake":
        alert("i is cake");
        break;
}

...it displays an error telling me that it should appear like this instead:

switch (i) {
case "apple":
    alert("i is apple");
    break;
case "bar":
    alert("i is bar");
    break;
case "cake":
    alert("i is cake");
    break;
}

It seems counterintuitive, as each case is now inline with the switch block itself. I can't imagine any reason why this would be considered better, much less trigger an error.

Is JSLint in err, or is it just following convention? If the latter is true, why wouldn't the convention be to indent for clarity?

like image 608
claviska Avatar asked Jan 21 '11 16:01

claviska


People also ask

Is JavaScript sensitive to indentation?

There are no special rules for JavaScript since it's not a white space sensitive language. It comes down to your own personal preference, so there is really no right or wrong.

Does JavaScript follow indentation?

Spacing and indentation should be consistent throughout your code. Many developers choose to use 4-space or 2-space indentation. In JavaScript, each nested statement (e.g., a statement following a "{" brace) should be indented exactly once more than the previous line's indentation.

When should I use switch in JavaScript?

Use switch instead of if when: You are comparing multiple possible conditions of an expression and the expression itself is non-trivial. You have multiple values that may require the same code. You have some values that will require essentially all of another value's execution, plus only a few statements.


4 Answers

It's your code. Format it how you want to. Use jsLint, but if you disagree that its recommendations improve your code, don't implement them. jsLint hurts your feelings.

like image 53
lonesomeday Avatar answered Sep 19 '22 02:09

lonesomeday


In Crockford's book, he states that blocks do not introduce a new scope. "JSLint expects blocks with function,if,switch,while,for,do and try statements and nowhere else."

Also that

if (condition){
    statements; 
}

Is the recommended method of doing blocks; as it is "more resilient". I highly doubt it was structured that way in error.

like image 42
VoronoiPotato Avatar answered Sep 20 '22 02:09

VoronoiPotato


As long as your indenting can be logically justified you should indent in the style you prefer. If JSLint really complains about this then it's being overly pedantic.

like image 38
GordonM Avatar answered Sep 21 '22 02:09

GordonM


While formatting is important, in the end it's your formatting. Do it how you like. The particular style you choose is a personal choice and many styles can be "good". However, any "good" formatting style must be consistent - pick the rules you like and stick to them.

It's kind of funny to me how debates rage over things like placing { on the same line as the preceeding code or not, or "cuddling curly braces" around an else. I think only communists place a { on the same line as their if statement. :)

like image 38
Surreal Dreams Avatar answered Sep 19 '22 02:09

Surreal Dreams