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?
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.
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.
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.
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.
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.
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.
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. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With