braces in C++
От: Аноним  
Дата: 20.04.10 15:41
Оценка: +1 -1 :)
Добрый день коллеги. Раньше, когда еще был студент, сабж не использовал если были простые конструкции тип:
if (a)
    f();

В компаниях при работе с большими проектами всегда заставляли ставить скобки даже для таких конструкций. Приучился и сам, только бесило что заставляли ставить скобку в отдельной строке:
if (a)
{
    f();
}

Требуют, ну и требуют, делаю, но в своих проектах я тоже всегда стал использовать скобки, но:
if (a) {
    f();
}

Я уже на столько так привык, что не могу смотреть на код без скобок в простых выражениях.
На новой работе, более опытный коллега возмущается по этому поводу. А какое Ваше мнение по этому поводу?
И еще коллега возмущается, что я везде использую
std::

Он везде использует using namespase std;
Ваше мнение по этому поводу?

21.04.10 14:53: Перенесено из 'C/C++'
Re: braces in C++
От: placement_new  
Дата: 20.04.10 15:45
Оценка: 3 (3) +3
Здравствуйте, Аноним, Вы писали:

Подобные вещи решаются не количеством опыта и длинной письки, а стандартом кодирования в компании.
Re: braces in C++
От: Alexander G Украина  
Дата: 20.04.10 15:50
Оценка: 1 (1) +3
Здравствуйте, Аноним, Вы писали:

А>Я уже на столько так привык, что не могу смотреть на код без скобок в простых выражениях.

А>На новой работе, более опытный коллега возмущается по этому поводу. А какое Ваше мнение по этому поводу?

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

А>Он везде использует using namespase std;

А>Ваше мнение по этому поводу?

Не стоит злоупотреблять using namespace, это убивает пользу от пространсв имён.

В хедерах на уровне файла писать using namespace не следует вообще.

Для длинных namespace удобно создавать локальные alias'ы, но std к таким, разумеется, не относится.
Русский военный корабль идёт ко дну!
Re: braces in C++
От: TarasKo Голландия  
Дата: 20.04.10 16:30
Оценка: 1 (1) +3 -2
По поводу скобок. Я тоже приучен их ставить всегда. Причем скобку на той же строке что и if
ну то есть

if (var) {
  f();
}


И есть под этим основание.
Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось

if (var)
  f();
  f1();
  f2();


Классическая ситуация, 10 вечера перед релизом. Программа вела себя как-то странно, через некоторое время в дебаггере увидел что в этом месте творится чертовщина, почему-то f1(), f2() не исполняются (напоминаю 10 вечер, уставший, охота домой баг непонятный и критичный). Я всегда такие вещи видел, а именно в тот момент, я смотрел и тупил. А я потратил час прежде чем мой воспаллённый мозг понял в чём дело. И когда я понял возненавидел этого программиста

Это дейстивтельно нужное правило в Code Convention, оно предотвращает баги. Оно действительно, полезно и нужно, оно намного ценне чем 2 или 4 пробела, или где ставить скобочку фигурную, на той же строке или на следующей.
Re[2]: braces in C++
От: TarasKo Голландия  
Дата: 20.04.10 16:43
Оценка:
А по поводу std. Возможно ваш более опытный программист не сталкивался с ситуацией, что namespace в вашем проекте имеет такое же имя что и namespace во внешней библиотеке неважно сторонней или библиотеки вашей же фирмы, и при этом приходится собирать всё старым компилятором. Если у вас ситуация не такая, то я за вас очень рад и я бы тоже с удовольствием писал

using namespace std;
или там
using namespace boost;


Но правда с большими библиотеками я бы всё равно так не делал
using namespace boost::mpl;
using namespace boost::interprocess;
лучше уж
namespace ipc = boost::interprocess;
Re: braces in C++
От: CreatorCray  
Дата: 20.04.10 17:22
Оценка: +4 -8
Здравствуйте, <Аноним>, Вы писали:

А>На новой работе, более опытный коллега возмущается по этому поводу. А какое Ваше мнение по этому поводу?


А>
А>if (a)
А>    f();
А>

Хорошо и правильно

А>
А>if (a)
А>{
А>    f();
А>}
А>

Избыточно и неоправданно. Оправдания про "а вдруг понадобится" несостоятельны.

А>
А>if (a) {
А>    f();
А>}
А>

Нечитабельно + избыточно

А>И еще коллега возмущается, что я везде использую

А>
А>std::
А>

А>Он везде использует using namespase std;
по мне так std:: лучше
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: braces in C++
От: CreatorCray  
Дата: 20.04.10 17:22
Оценка: 1 (1) +8 -1
Здравствуйте, TarasKo, Вы писали:

TK>И есть под этим основание.

TK>Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось

TK>
TK>if (var)
TK>  f();
TK>  f1();
TK>  f2();

TK>


C'mon!
Эта отмазка стара как говно мамонта.
Если он пребывал в таком астрале то ничто ему не мешало дописать то же самое после скобки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: braces in C++
От: skeptik_  
Дата: 20.04.10 18:41
Оценка:
Здравствуйте, TarasKo, Вы писали:

TK>Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось


TK>
TK>if (var)
TK>  f();
TK>  f1();
TK>  f2();

TK>


TK>Классическая ситуация, 10 вечера перед релизом. Программа вела себя как-то странно, через некоторое время в дебаггере увидел что в этом месте творится чертовщина, почему-то f1(), f2() не исполняются


Тесты где?

ЗЫ Если стандарты требуют это одно, но сам я не люблю излишнее.
Re: braces in C++
От: Ytz https://github.com/mtrempoltsev
Дата: 20.04.10 18:57
Оценка: +3 :)
По поводу скобок вопрос холиварный, по второму же вопросу уверен, что использование неймспейсов значительно повышает читабельность кода. Например:

boost::iostreams::copy(in, out);


или

copy(in, out);


Что понятней?
Re[3]: braces in C++
От: Кодт Россия  
Дата: 20.04.10 19:15
Оценка: 3 (1) +2
Здравствуйте, CreatorCray, Вы писали:

CC>Эта отмазка стара как говно мамонта.

CC>Если он пребывал в таком астрале то ничто ему не мешало дописать то же самое после скобки.

А сценарии кривого совмещения версий?
Перекуём баги на фичи!
Re[3]: braces in C++
От: Roman Odaisky Украина  
Дата: 20.04.10 20:01
Оценка: +4
Здравствуйте, CreatorCray, Вы писали:

TK>>Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось

CC>Если он пребывал в таком астрале то ничто ему не мешало дописать то же самое после скобки.

А если программист вполне в здравом уме, отсутствие скобок осознаёт, и желает вписать еще пару строк в тело if, то ему придется скобки прикручивать вручную. Кто как, а я нахожу намного менее затратным всегда и везде ставить скобки (что некоторые IDE умеют автоматизировать), чем добавлять их при необходимости. Заодно все else гарантированно совмещаются со своими if:

    if(c1)
//  {
        if(c2)
            f1();
        else
            f2(); // а не удалить ли эту строчку вместе с else?
//  }
    else
//  {
        f3();
//  }
До последнего не верил в пирамиду Лебедева.
Re[3]: braces in C++
От: TarasKo Голландия  
Дата: 20.04.10 20:21
Оценка: +1
Если бы это выглядело вот так, то сильно бросалось бы в глаза

if (var) {
  f();
}
  f1();
  f2();


И сделать подобную ошибку намного сложнее, конечно всякое в жизни бывает, но всё равно.
Во-первых написать так намного сложнее, скобки то вот, зачем после скобок добавлять, это режет глаз намного сильнее, чем когда нет скобок.
Во-вторых даже если такое оказалось написано, мне как человеку который ищет ошибку в 10 вечера перед релизом, заметить это намного проще. Скобка она как красная тряпка . Сразу видно что f1 и f2 вне if

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

Охота задать вопрос, тем кто не согласен с обязательными скобками. А что вы выигрываете в случае если скобочку не ставить. Экономите одну строку? Или это просто привычка и скобка там нарушит ваше чувство гармонии.

По поводу кривого совмещения версий. Не очень представляю, хорошо бы увидеть пример. Такую ошибку от программистов, я встречаю не в первый раз. А что бы ошибиться "мерджерер" не припоминаю. В конфликтных ситуация всегда всё ругалось и требовало ручного вмешательства. Возможно мой опыт не такой большой, программирую всего 4 года
Re[2]: braces in C++
От: TarasKo Голландия  
Дата: 20.04.10 20:36
Оценка: +1
Отлично! Я там какие-то аргументы придумываю, привожу примеры из жизни, пытаюсь там че-то сравнивать. А у вас всё просто:
Это хорошо, а это плохо.
Это читабельно, а это не нечетабельно.
Это избыточно, а это нормально
Это правильно, а это не правильно.
Все несогласные в сад
Завидую, хочу так же
Re: braces in C++
От: se_sss  
Дата: 20.04.10 20:56
Оценка: +3
Здравствуйте, Аноним, Вы писали:
А>
А>if (a) {
А>    f();
А>}
А>

Это приемлемо, если человек следит за своим кодом, но становится неприятным, когда он напишет кучу вложенных if несколько страниц — тяжело понять, где начало и где конец блока.
Re[3]: braces in C++
От: TarasKo Голландия  
Дата: 20.04.10 20:57
Оценка:
А вы всегда работали на проектах, где есть юнит тесты? Или когда приходили на новую работу, то первым дело говорили начальнику. "Я пришёл, сейчас мы все сядем и напишем на весь ваш мегапроект юнит тесты. Но перед тем как это делать, мы сначала перепишем и отрефачим все ваши классы с неадыкватным интерфейсом, так что бы их вообще можно было как-то тестировать."

Большинство в этом приложении было написано не мной, а тем человеком к которому я не могу подойти и сказать, а давай-ка ты напишешь юнит тесты на всё что ты писал в течении пары лет.
Re[4]: braces in C++
От: CreatorCray  
Дата: 20.04.10 21:27
Оценка: +3 -1 :)
Здравствуйте, Roman Odaisky, Вы писали:

RO>А если программист вполне в здравом уме, отсутствие скобок осознаёт, и желает вписать еще пару строк в тело if, то ему придется скобки прикручивать вручную.

Это просто безумно затратно, да!
Куда менее затратно ставить их везде, ведь во всех местах 100% что нить будет дописываться!

RO>Заодно все else гарантированно совмещаются со своими if:


if (c1)
{
    if (c2)
        f1();
    else f2(); // а не удалить ли эту строчку вместе с else?
}
else f3();


Да удаляй на здоровье!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: braces in C++
От: CreatorCray  
Дата: 20.04.10 21:27
Оценка: +2 -1
Здравствуйте, TarasKo, Вы писали:

TK>Охота задать вопрос, тем кто не согласен с обязательными скобками. А что вы выигрываете в случае если скобочку не ставить. Экономите одну строку? Или это просто привычка и скобка там нарушит ваше чувство гармонии.

Код выглядит более читабельным.
Впрочем правило не ставить такие скобки как правило идёт вместе с другими правилами оформления кода, типа отделять логические куски программы пустыми строками и т.п. В результате комплекса этих правил код хорошо читаем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: braces in C++
От: CreatorCray  
Дата: 20.04.10 21:27
Оценка: +1
Здравствуйте, TarasKo, Вы писали:

TK>Завидую, хочу так же

Это же так просто!
Я научу:

Хорошее оформление люблю, плохое — нет.

Вот и всё!

TK>Отлично! Я там какие-то аргументы придумываю, привожу примеры из жизни, пытаюсь там че-то сравнивать. А у вас всё просто:

TK>Это хорошо, а это плохо.
TK>Это читабельно, а это не нечетабельно.
TK>Это избыточно, а это нормально
TK>Это правильно, а это не правильно.
Это всё субъективные оценки.
Одному оформление нравится, читабельно, удобно и неизбыточно а другому — лажа полная и говнокод.
Нет общего знаменателя.
Поэтому и придумывают кодинг стандарт когда собирается группа людей работать над одним проектом — чтоб заставить писать всех одинаково, а не как удобно им.

TK>Все несогласные в сад

Именно!
Один вопрос что считаю правильным и читабельным лично я (а все эти критерии строго субъективны) и другое, что требуется по кодингстандарту на проекте, в котором я участвую.
У меня на данный момент проект в котором принят linux style:
if (cond) {
    expr;
}

я такой стиль считаю кошмарным. Но мне пофигу, я пишу коммерческий код, и мои предпочтения никакой роли не играют.
Те проекты где я рулю — я задаю правила и там так, как мне нравится.
Вот и всё.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: braces in C++
От: emp  
Дата: 20.04.10 21:32
Оценка: :)
так делаю:
if(a)
{
    f1();
    f2();
}


if(a)
    f1();    

// или так, в зависимости от того что лучше смотрится в данном куске кода
if(a)
{
    f1();
}

std::

namespace fs = boost::filesystem; // только внутри тел ф-ций

но если кто-то делает по другому, меня не напрягает. главное чтобы в одном файле стиль был одинаковый
Re[2]: braces in C++
От: emp  
Дата: 20.04.10 21:41
Оценка:
а вот еще вспомнилось
if(a)
if( a )
if (a)
if ( a )

x=1+2;
x = 1 + 2;       // коммент здесь
x = 1 + 2 ;      // коммент здесь
x = 1 + 2      ; // коммент здесь
x = 1 + 2 + 3  ; // коммент здесь
// коммент здесь

я пишу
if(a)
x = 1 + 2;       // коммент здесь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.