JavaScript заключает в фигурные скобки на новой строке или нет? [закрытый]

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

function something() {
    // ...
}

function something()
{
    // ...
}

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

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

48
задан Gert Grenander 10 July 2010 в 04:43
поделиться

9 ответов

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

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

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

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

32
ответ дан 7 November 2019 в 12:00
поделиться

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

.
0
ответ дан 7 November 2019 в 12:00
поделиться

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

0
ответ дан 7 November 2019 в 12:00
поделиться

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

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

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

return {
   'status': 'ok'
};

... и:

return 
{
   'status': 'ok'
};

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


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

148
ответ дан 7 November 2019 в 12:00
поделиться

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

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

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

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

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

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

13
ответ дан 7 November 2019 в 12:00
поделиться

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

5
ответ дан 7 November 2019 в 12:00
поделиться

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

Лично я предпочитаю стиль "подтянутый", с "настоящими" табуляциями через 4 пробела.

function a() {
    if (b) {
        do;
    } else {
        do2;
    }
}
4
ответ дан 7 November 2019 в 12:00
поделиться

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

3
ответ дан 7 November 2019 в 12:00
поделиться

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

Вот ссылка на него: http://javascript.crockford.com/code.html

18
ответ дан 7 November 2019 в 12:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: