Задать вопрос
Daniro_San
@Daniro_San
Программист

Ставить ли фигурные скобочки?

Понимаю, вопрос странный, но я не знаю что лучше когда требуется выполнить одно действие с условием.
Например:
if(any)
     {
            // строка кода
     }

Или так:
if(any)
          // строка кода

У Срауструпа в примерах ничего по этой теме неясно - в одних случаях он использует фигурные скобки после условия, даже если нужно выполнить всего одно действие, в других нет.
Красота или лаконичность?
  • Вопрос задан
  • 2695 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 3
aminought
@aminought
Правилом хорошего тона считается постановка фигурных скобок в любом случае. Для вдохновения можете прочитать вот эту статью: Исключительная красота исходного кода Doom 3
Ответ написан
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Ответ на этот вопрос не так однозначен. Существуют стандарты оформления кода, согласно которым должен быть отформотирован весь исходный код. Это актуально и для коммерческих компаний и для открытых проектов. Поэтому "хорошо" или "плохо" сказать нельзя, нужно говорить "соотвествует стандарту или нет". Можете для своих личных проектов выбрать какой-нибудь стандарт кодирования и следовать ему. Вот пример стандарта: https://wiki.qt.io/Coding_Conventions . Помимо этого существуют программы, которые позволяют отформатировать весь код согласно набору правил (astyle, clang-format, uncrustify etc.). Использовать их далеко не всегда удобно, так как зачастую форматирование может быть не стандартным чтобы повысить читабельность кода, но в общем случае нормально.

Что касается вашего примера, я предпочитаю не ставить лишние скобки для тела if в одну инструкцию:

// OK
if (a > 3)
    ++a;


Но никогда не пишите эту инструкцию на той же строке -- не удобно отлаживать (может быть в какой-то IDE и удобно, но обычно каждый разработчик пользуется своей любимой...):

if (a > 3) ++a; // Как поставить бряку на "++a"?

Что касается циклов, то с for лучше всегда ставить скобки, т.к. некоторые IDE в режиме отладки вроде VS2008 (а возможно и более старших версий) не умеют заходить в тело однострочного цикла без скобок.
Ответ написан
@abcd0x00
Руководствоваться нужно тем, что хорошо видно, и тем, что легко менять. Опыт показывает, что фигурные скобки для этого подходят лучше.

if (cond)
    ;
else
    statement;

if (cond) {}
else {
    statement;
}

Когда нужно добавить операторы в любую ветвь, то в первом случае нужно добавить фигурные скобки, а во втором случае фигурные скобки там уже есть.

Также фигурные скобки не дают частям конструкций приклеиться не туда. Представь, что кто-то незнакомый писал код, который тебе нужно дописывать.
Ты быстро пробегаешь его глазами и понимаешь неправильно, потому что такого кода три тонны.
if (cond)
    if (cond)
        if (cond) {
            statement;
        statement;
        }
    else
        statement;
else
    statement;


А вот он же
if (cond) {
    if (cond) {
        if (cond) {
            statement;
        statement;
        }
    else {
        statement;
    }
}
else {
    statement;
}
}

Ты поставил курсор на скобочку в случае сомнений - и редактор тут же тебе подсветил парную скобку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
if(any) {
    // строка кода
}
Ответ написан
Комментировать
@Noortvel
if(any) // строка кода ;
?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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