Отступ от PHP к JavaScript - PullRequest
       4

Отступ от PHP к JavaScript

11 голосов
/ 21 января 2011

Хотя я понимаю, что у каждого языка есть свое соглашение об отступах, я не могу не раздражаться тому, что недавно обнаружил.Рассмотрим этот код из руководства 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.Это имеет смысл, так как код легче читать, а тело блока содержит один уровень внутри него.

Однако, когда я тестирую эквивалентный оператор переключения 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 ошибкой или это просто следование соглашению?Если последнее верно, почему бы соглашению не быть отступ для ясности?

Ответы [ 8 ]

6 голосов
/ 21 января 2011

Это твой код.Отформатируйте его так, как вы хотите.Используйте jsLint, но если вы не согласны с тем, что его рекомендации улучшают ваш код, не реализуйте их.jsLint ранит ваши чувства.

4 голосов
/ 21 января 2011

В книге Крокфорда он утверждает, что блоки не вводят новую область видимости.«JSLint ожидает блоки с функцией if, switch, while, for, do и try операторов и больше нигде».

Кроме того,

if (condition){
    statements; 
}

Рекомендуемый метод создания блоков;как это "более устойчивым".Я очень сомневаюсь, что это было структурировано по ошибке.

2 голосов
/ 21 января 2011

Пока ваш отступ логически обоснован, вы должны делать отступ в том стиле, который вы предпочитаете. Если JSLint действительно жалуется на это, то это чрезмерно педантично.

1 голос
/ 21 января 2011

Хотя форматирование важно, в конце концов, это ваше форматирование. Делай как хочешь. Конкретный стиль, который вы выбираете, - это личный выбор, и многие стили могут быть «хорошими». Однако любой «хороший» стиль форматирования должен быть согласованным - выберите правила, которые вам нравятся, и придерживайтесь их .

Мне немного смешно, как бушуют споры о таких вещах, как размещение {в той же строке, что и предыдущий код или нет, или "обнимающиеся фигурные скобки" вокруг else. Я думаю, что только коммунисты ставят {в той же строке, что и их if заявление. :)

0 голосов
/ 30 сентября 2016

Я также нашел это очень запутанным, и нашел эту причину в Условных обозначениях Дугласа Крокфорда для языка программирования JavaScript в http://javascript.crockford.com/code.html

Предложения (case, catch, defaultв противном случае, наконец) не являются утверждениями и поэтому не должны иметь отступы как утверждения.

0 голосов
/ 29 мая 2012

Это его фон Java.Способ JSLint имитирует официальные соглашения Java для случая переключения .Я предпочитаю ваш первый пример, но я учусь терпеть JSLint.

0 голосов
/ 21 января 2011

Дополнительные пробелы анализируются из JavaScript и PHP, когда они интерпретируются, поэтому вы можете сделать свой код таким безобразным, как вам хотелось бы. Лично я предпочитаю добавлять в фигурные скобки дополнительные фигурные скобки, чтобы не пропустить ошибочные ошибки:

switch ($someVar)
{
  case 'value':
  {
    //your code here
  } break;
  case 'something':
  {
    //more code here
  }
  case 'something else':
  {
    //some more code here
  } break;
  default:
  {
    //default code here
  } break;
}

Просмотр кода в конечных скобках позволяет мне проверить, правильно ли я добавил операторы разрыва. Вы можете видеть, что в случае 'something' отсутствует оператор разрыва (возможно, намеренно, возможно, ошибка).

Некоторые не согласятся с этим форматом, но это действительно то, к чему я стремлюсь. Формат не имеет большого значения. Парсеры довольно прощающие. Найдите то, что работает для вас, и придерживайтесь его.

0 голосов
/ 21 января 2011

Это просто соглашение для JS (поскольку JSLint определяет соглашение).Лично я думаю, что PHP здесь был бы неправильным (не знаю, если руководство следует любому соглашению, я знаю, что стандартная библиотека не делает).Я предпочитаю стиль JS, потому что он может стать очень неприятным, если вы находитесь в нескольких вложенных блоках.Например (код PHP):

 class Foo{
      function Bar($arr) {
          foreach($arr as $item) {
              switch ($item) {
                  case "foo":
                       // Do something
                       break;
                       // You get the idea

В конечном счете, ваш выбор.Я бы не стал использовать руководство по PHP как руководство по стилю;если вы не можете использовать разные стили для разных языков, используйте четко определенный стиль JS.

...