Скобки на новой линии или нет?

На работе мы размещаем фигурные скобки на следующей строке, но дома, я делаю наоборот. Какой из них вы предпочитаете? (K & R vs OTBS)

function something() {
    // ...
}

function something()
{
    // ...
}

Многие библиотеки JavaScript, похоже, используют OTBS (один истинный стиль фигурной скобки). Я хотел бы следовать им за консистенцию среди других проектов JavaScript, но не выглядит ли стиль K & R более читабельным?

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

Ответ 1

Это священная война, к которой вы никогда не получите полезный ответ! Просто придерживайтесь всех, что есть в проекте, и не спорьте!

Для чего это стоит, я - K & Rite. Я нахожу, что OTBS ставит много визуального пространства между структурой открытия и следующим утверждением, когда эти две строки часто сильно связаны, поэтому их лучше представлять вместе без промежуточной почти пустой строки. Мне нравится сохранять пустые строки для разделения блоков связанных операторов.

В стиле кодирования, в котором много пропусков, это может быть относительно неважным. Но лично я ценю терпение, поэтому я могу больше держать программу на экране.

Я не покупаю, что проблема с открытой скобкой в ​​другом столбце с закрывающей скобой является проблемой. Легко видеть форму блока только из отступов. Если вы не используете висячие отступы. Не делай этого. Но эта еще одна Священная война целиком.

Ответ 2

Дуглас Крокфорд дает повод для выбора стиля K & R 1:

Я всегда использую стиль K & R, помещая { в конец строки вместо фронта, потому что он избегает ужасной ошибки дизайна в инструкции JavaScript return.

Ошибка, о которой он говорит, заключается в том, как JavaScript обрабатывает оператор return по-разному в следующих двух сценариях:

return {
   'status': 'ok'
};

... и:

return 
{
   'status': 'ok'
};

Первый возвращает объект с свойством status, а последний вернет undefined из-за вставки с запятой.


1Дуглас Крокфорд: JavaScript: Хорошие детали: стиль (стр. 96) - ISBN: 978-0596517748.

Ответ 3

Я следую за соглашением о кодировании JavaScript в Douglas Crockford, которое было вдохновлено руководящими принципами Sun Java.

Здесь ссылка на него: http://javascript.crockford.com/code.html

Ответ 4

По-моему, это зависит от того, кто еще будет работать с вашим кодом. Если вы работаете в команде С# и разделяете множество обязанностей, поставьте его на новую строку и избегайте неизбежных споров, которые в противном случае будут следовать. Если вы работаете с большим количеством PHP (или старше JS-программистов), поместите его в первую строку по той же причине.

Но если вы ищете что-то более авторитетное, Дуглас Крокфорд говорит, что открывающая скобка должна всегда быть в верхней строке. Его рассуждение, если я правильно помню, состоит в том, что он согласуется с остальной частью языка. В принципе, поскольку это допустимо, но (возможно) неправильный код:

function myFunc() 
{
    return 
    {
      ok: true
    };
} 

... вам следует повсеместно избегать размещения открытых фигурных скобок на новой строке. Зачем? Поскольку стиль программирования не должен приводить к синтаксической двусмысленности.

Пример кода выше действителен, потому что он полностью синтаксически корректен, и никакие исключения не будут подняты, если вы напишете это. Однако вместо того, чтобы возвращать литерал объекта, {ok:true}, он вернет undefined, а код ниже этого не будет достигнут. Поместите открывающие фигурные скобки на одну строку, и она вернет объект, который вы, возможно, ожидали.

Вопрос в том, находите ли вы достаточно аргументированным аргументом?

Ответ 5

Ни один из них не лучше другого. Просто выберите один и используйте его последовательно.

Ответ 6

Все субъективные. Некоторые из них немного лучше, но разница незначительна. Самое важное, что нужно сделать, это оставаться согласованным во всем вашем коде.

Лично я предпочитаю заправленный стиль, с 4-мя "реальными" вкладками.

function a() {
    if (b) {
        do;
    } else {
        do2;
    }
}

Ответ 7

Я предпочитаю их в одной строке, но в основном потому, что много передаю анонимные функции в качестве аргументов... он сохраняет некоторое пространство и делает определение функции менее резким. Конечно, это всего лишь мнение, и я согласен с Bytecode Ninja, что согласованность - это самое важное.

Ответ 8

Как указано во многих ответах, в основном важно, чтобы вы нашли стиль, которым придерживаются (и/или ваши товарищи по команде, если применимо). Лично я предпочитаю такую ​​же линию, как я обнаружил, что добавление фигурных фигурных скобок в новую строку может привести к большому количеству близких пустых строк, если вы работаете с закрытием и вложенными функциями, что делает код менее читаемым для меня (хотя, вероятно, не для большинство людей...)

Ответ 9

Я предпочитаю метод K & R по тем же причинам, что указаны выше. Он выглядит более компактным, и две соответствующие линии группируются вместе.