Добрый день коллеги. Раньше, когда еще был студент, сабж не использовал если были простые конструкции тип:
if (a)
f();
В компаниях при работе с большими проектами всегда заставляли ставить скобки даже для таких конструкций. Приучился и сам, только бесило что заставляли ставить скобку в отдельной строке:
if (a)
{
f();
}
Требуют, ну и требуют, делаю, но в своих проектах я тоже всегда стал использовать скобки, но:
if (a) {
f();
}
Я уже на столько так привык, что не могу смотреть на код без скобок в простых выражениях.
На новой работе, более опытный коллега возмущается по этому поводу. А какое Ваше мнение по этому поводу?
И еще коллега возмущается, что я везде использую
std::
Он везде использует using namespase std;
Ваше мнение по этому поводу?
Здравствуйте, Аноним, Вы писали:
А>Я уже на столько так привык, что не могу смотреть на код без скобок в простых выражениях. А>На новой работе, более опытный коллега возмущается по этому поводу. А какое Ваше мнение по этому поводу?
Привыкнуть можно ко всему, я считаю что способ оформления блоков — слишком пустяковый повод для спора.
А>Он везде использует using namespase std; А>Ваше мнение по этому поводу?
Не стоит злоупотреблять using namespace, это убивает пользу от пространсв имён.
В хедерах на уровне файла писать using namespace не следует вообще.
Для длинных namespace удобно создавать локальные alias'ы, но std к таким, разумеется, не относится.
По поводу скобок. Я тоже приучен их ставить всегда. Причем скобку на той же строке что и if
ну то есть
if (var) {
f();
}
И есть под этим основание.
Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось
if (var)
f();
f1();
f2();
Классическая ситуация, 10 вечера перед релизом. Программа вела себя как-то странно, через некоторое время в дебаггере увидел что в этом месте творится чертовщина, почему-то f1(), f2() не исполняются (напоминаю 10 вечер, уставший, охота домой баг непонятный и критичный). Я всегда такие вещи видел, а именно в тот момент, я смотрел и тупил. А я потратил час прежде чем мой воспаллённый мозг понял в чём дело. И когда я понял возненавидел этого программиста
Это дейстивтельно нужное правило в Code Convention, оно предотвращает баги. Оно действительно, полезно и нужно, оно намного ценне чем 2 или 4 пробела, или где ставить скобочку фигурную, на той же строке или на следующей.
А по поводу std. Возможно ваш более опытный программист не сталкивался с ситуацией, что namespace в вашем проекте имеет такое же имя что и namespace во внешней библиотеке неважно сторонней или библиотеки вашей же фирмы, и при этом приходится собирать всё старым компилятором. Если у вас ситуация не такая, то я за вас очень рад и я бы тоже с удовольствием писал
using namespace std;
или там
using namespace boost;
Но правда с большими библиотеками я бы всё равно так не делал
using namespace boost::mpl;
using namespace boost::interprocess;
лучше уж
namespace ipc = boost::interprocess;
Здравствуйте, 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, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, TarasKo, Вы писали:
TK>Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось
TK>
TK>if (var)
TK> f();
TK> f1();
TK> f2();
TK>
TK>Классическая ситуация, 10 вечера перед релизом. Программа вела себя как-то странно, через некоторое время в дебаггере увидел что в этом месте творится чертовщина, почему-то f1(), f2() не исполняются
Тесты где?
ЗЫ Если стандарты требуют это одно, но сам я не люблю излишнее.
Здравствуйте, CreatorCray, Вы писали:
CC>Эта отмазка стара как говно мамонта. CC>Если он пребывал в таком астрале то ничто ему не мешало дописать то же самое после скобки.
Здравствуйте, CreatorCray, Вы писали:
TK>>Недавно один программист в нашей компании под if-ом без скобок дописал ещё несколько строчек, и получилось CC>Если он пребывал в таком астрале то ничто ему не мешало дописать то же самое после скобки.
А если программист вполне в здравом уме, отсутствие скобок осознаёт, и желает вписать еще пару строк в тело if, то ему придется скобки прикручивать вручную. Кто как, а я нахожу намного менее затратным всегда и везде ставить скобки (что некоторые IDE умеют автоматизировать), чем добавлять их при необходимости. Заодно все else гарантированно совмещаются со своими if:
if(c1)
// {if(c2)
f1();
else
f2(); // а не удалить ли эту строчку вместе с else?
// }else// {
f3();
// }
Если бы это выглядело вот так, то сильно бросалось бы в глаза
if (var) {
f();
}
f1();
f2();
И сделать подобную ошибку намного сложнее, конечно всякое в жизни бывает, но всё равно.
Во-первых написать так намного сложнее, скобки то вот, зачем после скобок добавлять, это режет глаз намного сильнее, чем когда нет скобок.
Во-вторых даже если такое оказалось написано, мне как человеку который ищет ошибку в 10 вечера перед релизом, заметить это намного проще. Скобка она как красная тряпка . Сразу видно что f1 и f2 вне if
По поводу того что это старо как говно мамонта Ну да вот круглое колесо тоже изобретено давно, однако факт того что это было давно, не означает что квадратное колесо лучше.
Охота задать вопрос, тем кто не согласен с обязательными скобками. А что вы выигрываете в случае если скобочку не ставить. Экономите одну строку? Или это просто привычка и скобка там нарушит ваше чувство гармонии.
По поводу кривого совмещения версий. Не очень представляю, хорошо бы увидеть пример. Такую ошибку от программистов, я встречаю не в первый раз. А что бы ошибиться "мерджерер" не припоминаю. В конфликтных ситуация всегда всё ругалось и требовало ручного вмешательства. Возможно мой опыт не такой большой, программирую всего 4 года
Отлично! Я там какие-то аргументы придумываю, привожу примеры из жизни, пытаюсь там че-то сравнивать. А у вас всё просто:
Это хорошо, а это плохо.
Это читабельно, а это не нечетабельно.
Это избыточно, а это нормально
Это правильно, а это не правильно.
Все несогласные в сад
Завидую, хочу так же
Это приемлемо, если человек следит за своим кодом, но становится неприятным, когда он напишет кучу вложенных if несколько страниц — тяжело понять, где начало и где конец блока.
А вы всегда работали на проектах, где есть юнит тесты? Или когда приходили на новую работу, то первым дело говорили начальнику. "Я пришёл, сейчас мы все сядем и напишем на весь ваш мегапроект юнит тесты. Но перед тем как это делать, мы сначала перепишем и отрефачим все ваши классы с неадыкватным интерфейсом, так что бы их вообще можно было как-то тестировать."
Большинство в этом приложении было написано не мной, а тем человеком к которому я не могу подойти и сказать, а давай-ка ты напишешь юнит тесты на всё что ты писал в течении пары лет.
Здравствуйте, 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, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, TarasKo, Вы писали:
TK>Охота задать вопрос, тем кто не согласен с обязательными скобками. А что вы выигрываете в случае если скобочку не ставить. Экономите одну строку? Или это просто привычка и скобка там нарушит ваше чувство гармонии.
Код выглядит более читабельным.
Впрочем правило не ставить такие скобки как правило идёт вместе с другими правилами оформления кода, типа отделять логические куски программы пустыми строками и т.п. В результате комплекса этих правил код хорошо читаем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, TarasKo, Вы писали:
TK>Завидую, хочу так же
Это же так просто!
Я научу:
Хорошее оформление люблю, плохое — нет.
Вот и всё!
TK>Отлично! Я там какие-то аргументы придумываю, привожу примеры из жизни, пытаюсь там че-то сравнивать. А у вас всё просто: TK>Это хорошо, а это плохо. TK>Это читабельно, а это не нечетабельно. TK>Это избыточно, а это нормально TK>Это правильно, а это не правильно.
Это всё субъективные оценки.
Одному оформление нравится, читабельно, удобно и неизбыточно а другому — лажа полная и говнокод.
Нет общего знаменателя.
Поэтому и придумывают кодинг стандарт когда собирается группа людей работать над одним проектом — чтоб заставить писать всех одинаково, а не как удобно им.
TK>Все несогласные в сад
Именно!
Один вопрос что считаю правильным и читабельным лично я (а все эти критерии строго субъективны) и другое, что требуется по кодингстандарту на проекте, в котором я участвую.
У меня на данный момент проект в котором принят linux style:
if (cond) {
expr;
}
я такой стиль считаю кошмарным. Но мне пофигу, я пишу коммерческий код, и мои предпочтения никакой роли не играют.
Те проекты где я рулю — я задаю правила и там так, как мне нравится.
Вот и всё.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
if(a)
{
f1();
f2();
}
if(a)
f1();
// или так, в зависимости от того что лучше смотрится в данном куске кодаif(a)
{
f1();
}
std::
namespace fs = boost::filesystem; // только внутри тел ф-ций
но если кто-то делает по другому, меня не напрягает. главное чтобы в одном файле стиль был одинаковый
if(a)
if( a )
if (a)
if ( a )
x=1+2;
x = 1 + 2; // коммент здесь
x = 1 + 2 ; // коммент здесь
x = 1 + 2 ; // коммент здесь
x = 1 + 2 + 3 ; // коммент здесь
// коммент здесь