Пока я понимаю, что у каждого языка есть своя конвенция для отступов, я не могу не раздражаться тем, что я недавно обнаружил. Рассмотрим этот код из руководства PHP:
switch ($i) {
case "apple":
echo "i is apple";
break;
case "bar":
echo "i is bar";
break;
case "cake":
echo "i is cake";
break;
}
Обратите внимание, что каждый случай имеет отступ от оператора switch. Это имеет смысл, так как код легче читать, а тело блока содержит один уровень внутри него.
Однако, когда я тестирую эквивалентный оператор switch JavaScript в JSLint:
switch (i) {
case "apple":
alert("i is apple");
break;
case "bar":
alert("i is bar");
break;
case "cake":
alert("i is cake");
break;
}
... он показывает ошибку, сообщающую мне, что он должен выглядеть следующим образом:
switch (i) {
case "apple":
alert("i is apple");
break;
case "bar":
alert("i is bar");
break;
case "cake":
alert("i is cake");
break;
}
Это кажется противоречивым, поскольку каждый случай теперь встроен в сам блок коммутатора. Я не могу себе представить, почему это будет считаться лучше, а тем более вызывать ошибку.
Является ли JSLint ошибочным, или это просто соответствует соглашению? Если последнее верно, то почему соглашение не должно быть отступом для ясности?