LINUX.ORG.RU
ФорумTalks

[c/c++] Форматирование скобок, заключающих блок.


0

0

Здравствуйте. Сейчас я на примере поясню, стоит писать вот так:

if( b )
{
	doSomething();

	if( result )
	{
		    b = false;
	}
}

А не вот так:

if( b ){
	doSomething();

	if( result ){
		    b = false;
	 }
}

Дело в том, что в первом случае мозг человека воспринимает блок как своего рода квадрат, и по cдвигу вправо определяет уровень вложенности. А во втором всё гораздо более искаженно. Сегодня с вами был капитан очевидность. Я запостил этот тред в надежде, что хоть чуточку меньше народу станет писать (){ и } else {. Оставляйте свои комментарии.

Модераторам: если считаете нужным, дропните в Development.



Последнее исправление: ShTH (всего исправлений: 1)

предпочитаю второй вариант, как и написано в джава кодинг конвешенах

JFreeM ★★★☆
()
Ответ на: комментарий от siberean

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

RedPossum ★★★★★
()
Ответ на: комментарий от ShTH

Я про это:

if( b ){ 
   doSomething(); 
 
   if( result ){ 
          b = false; 
    } 
}

vs

if( b ){ 
   doSomething(); 
 
   if( result ){ 
          b = false; 
   } 
}
Deleted
()
Ответ на: комментарий от siberean

> Уходят, вернее убегают с позором,

вы плохо их научили, если они считают позором неработающую программу.

как хорошо, что они убегают из такого плохого места.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>понятно, что так просто скомпилить ее не дадут (если не знаете жаву, то просто поверьте: reponse.getWriter может выбросить исключение).

throws IOException, и тебе дадут!

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

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

linuxfan
()

Топикстартеру совет.
Привыкайте ко второму варианту.
Через нескльких лет работы с чужим кодом, с большим количеством кода - будете код видеть как картинку, и вторая картинка - будет гораздо более сбалансированная, короткая, с меньшим «шумом» - чем первая.
Привыкните и поймёте почему так.
У нас, к примеру, все программисты единодушны во мнении и пишут и функции так (скобочка сразу за функцией),
и без пробелов вокруг вашего b. Так быстрее, меньше лишних ненужных байтов, код более скомпрессирован
(н не настолько - чтобы его нельзя было понять - как это было бы в объединении нескольких строк).

siberean
()
Ответ на: комментарий от linuxfan

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

Есть возможность, что однажды придется расширять функционал ифа, тогда придется все переделывать.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

>Есть возможность, что однажды придется расширять функционал ифа

Ох не зря мне в твоем нике привиделось «drug».

тогда придется все переделывать

А если какой-нибудь маньяк перекроит таблицу ASCII символов и поменяет код у {}? Это ж вообще УЖАС будет.

linuxfan
()
Ответ на: комментарий от linuxfan

> Фигурной-скобке-по-строке живет только за счет копипасты застаревшего быдлокода?

почему застаревшего?

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

находишь прогу Y, написанную на PHP. Прога представляет собой одну большую функцию страниц на 8 безо всяких комметариев, зато написанную в стиле примера номер 2.

понять как это работает - невозможно (и даже если это возможно - времени на анализ всё равно нет). Задача - скопипастать код, прменить на него парочку регэксповых find-and-replace, с плеча выдрать из него с корнем какие-то куски (в надежде что ничего не поломается) и вставить полученное в код на Java.

мне кажется, что в этом варианте вариант 1 оформления кода выглядит лучше. Т.е. когда ты не пишешь код, а только кромсаешь и склеиваешь разнородные куски. Тогда мыслишь как раз теми самыми кусками, а не управляющими конструкциями.

понял о чем я? :)

поменять indentation современнными средствами настолько легко


современные средства еще не научились автоматически выискивать в чужом быдлокоде годные для копипаста блоки :)

stevejobs ★★★★☆
()

лучше вот так

if( b ):
    doSomething()
    if( result ):
        b = false
а скобочки и ; добавляются скриптом. угадайте на чем.

olegsov
()
Ответ на: комментарий от siberean

Пожалуй вы правы. Наверное буду просто использовать кернел стайл, ну или же k&r и не выпендриваться. Хотя с другой стороны жалко, что стандарты изначально не стремились сделать понятными для новичков.

ShTH
() автор топика
Ответ на: комментарий от stevejobs

мне кажется, что в этом варианте вариант 1 оформления кода выглядит лучше. Т.е. когда ты не пишешь код, а только кромсаешь и склеиваешь разнородные куски. Тогда мыслишь как раз теми самыми кусками, а не управляющими конструкциями.

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

ShTH
() автор топика

Это холивар! Даже авторы книг по программированию не навязывают стиль форматирования

fero ★★★★
()
Ответ на: комментарий от Pentium02

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

ShTH
() автор топика
Ответ на: комментарий от Yareg

Нармашка :)
Просто посля «эталонных» МС и «за 21 день», он по дикому немного смотрится :)

Jetty ★★★★★
()
Ответ на: комментарий от fero

Это холивар! Даже авторы книг по программированию не навязывают стиль форматирования

Каков ваш опыт?

ShTH
() автор топика

Я запостил этот тред в надежде, что хоть чуточку меньше народу станет писать (){ и } else {. Оставляйте свои комментарии.

Мозг человека пропускает ненужные по смыслу скобки, если разбиение на блоки видно по отступам. А вот строки хорошо бы съэкономить.

class My_Class  {public: 
    Type field;
    void some_method () {
        if (some_condition ()) {
            do_something ();
            field = some_func (arg1, ar [3]);
            if (some_other_condition ()) {
                 do_something_else ();};};};};  

int main (void) {
    My_Class var;
    var.some_method ();};

Чем такой стиль плох. Кроме того, что почти никто им не пользуется?

ival ★★
()
Ответ на: комментарий от ival

> Чем такой стиль плох. Кроме того, что почти никто им не пользуется?

Пользуется. Этот стиль называется Python.

stevejobs ★★★★☆
()

if( b ){
} else {

УГ. При редактировании нужно постоянно быть начеку, чтобы случайно не снести завершающую скобку или не получить «} else {if» вместо «} else if … {». Клавиатурными хоткеями типа shift+end уже не воспользуешься. Комментировать ту же else-ветку неудобно.

А если всё же снесёшь скобку после какого-нибудь длинного if'а, то заметишь её отсутствие только после облома с компиляцией. Или наоборот, получишь прикол типа такого:

if (((x>0) || (x<5)) && ((y>0) || (y<5)) && (z>0)) {
        return 1;
n=1;

Поэтому я спустя некоторое время стал все скобки выносить на отдельную строчку. Мухи отдельно, котлеты отдельно. © А все профи пусть идут нафиг. :)

AX ★★★★★
()
Ответ на: комментарий от AX

А да будет простота и легкость понимания превыше понтов.

ShTH
() автор топика

В общем-то и так очевидно, а вообще Питон рулед =)

DNA_Seq ★★☆☆☆
()

О скобки!

а еще нужно рассмотреть

пробелы (1,2,3,4 или 8) против табуляций

ставить ли пробел перед круглой скобкой

ставить ли пробелы внутри круглых скобок

где оставлять оператор (+ -) при переносе длинных выражений

(тред не читал)

sign
()
Ответ на: комментарий от sign

Отвечают зрители

>пробелы (1,2,3,4 или 8) против табуляций

Табуляции онли.

ставить ли пробел перед круглой скобкой


Обязательно!

ставить ли пробелы внутри круглых скобок


По мере возможностей избегать.

где оставлять оператор (+ -) при переносе длинных выражений


Не особо важно, лучше на следующей.

Ещё вопросы? :)

AX ★★★★★
()
Ответ на: комментарий от Yareg

А стиль гну почему никто не вспомнил? Там вообще нечто ужасное, имхо.

Вот так:

if (expr)
  {
    /* body */
  }

По-моему, так можно писать, только если за тебя IDE все расставляет, иначе изврат полнейший

annulen ★★★★★
()
Ответ на: комментарий от sign

>пробелы (1,2,3,4 или 8) против табуляций

2 пробела, на худой конец 4

ставить ли пробел перед круглой скобкой

конечно нет

ставить ли пробелы внутри круглых скобок

если много вложенных уровней

где оставлять оператор (+ -) при переносе длинных выражений

переносить

annulen ★★★★★
()
Ответ на: комментарий от annulen

>конечно нет

написал я, перед этим поставив пробел) я обычно избегаю пробела в прототипах, определения и вызовах функций, а в условных конструкциях и циклах ставлю

annulen ★★★★★
()
Ответ на: комментарий от rg-400

>8

не удобно, реально. когда большая вложенность, даже с 4 слишком много пустого места

annulen ★★★★★
()
Ответ на: Отвечают зрители от AX

> Ещё вопросы? :)

Я думаю, невозможно придумать один стиль форматирования, который устроит всех. К тому же предпочтения со временем меняются. Одно время я тоже предпочитал скобку { на следующей строке. Сейчас снова предпочитаю указывать ее на той же строке.

Обычно я настраиваю под себя indent, чтобы он форматировал в стиле который я предпочитаю именно сейчас.

sign
()
Ответ на: комментарий от sign

какое вино^Wформатирование вы предпочитаете в это время суток? :)

annulen ★★★★★
()
Ответ на: комментарий от stevejobs

> вот пишешь ты прогу, и тебе надо расчитать какую-то функцию X (хэш). Ты идешь в гуголь, и начинаешь рыться: а в каких прогах уже такое реализовано.

находишь прогу Y, написанную на PHP. Прога представляет собой одну большую функцию страниц на 8 безо всяких комметариев, зато написанную в стиле примера номер 2.

понять как это работает - невозможно (и даже если это возможно - времени на анализ всё равно нет). Задача - скопипастать код, прменить на него парочку регэксповых find-and-replace, с плеча выдрать из него с корнем какие-то куски (в надежде что ничего не поломается) и вставить полученное в код на Java.


мне кажется, что в этом варианте вариант 1 оформления кода выглядит лучше. Т.е. когда ты не пишешь код, а только кромсаешь и склеиваешь разнородные куски. Тогда мыслишь как раз теми самыми кусками, а не управляющими конструкциями.


ху..се метод... жесть

FollowTheRabbit
()

Использовал оба варианта. Сначала казалось что вариант 1 лучше, но с опытом понял, что 2 рулит.

FollowTheRabbit
()
Ответ на: комментарий от ival

> Мозг человека пропускает ненужные по смыслу скобки, если разбиение на блоки видно по отступам. А вот строки хорошо бы съэкономить.
Отсутствие скобок иногда приводит к неожиданным багам. ИМХО скобки нужны всегда.

FollowTheRabbit
()

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

если же ты пишешь свой проект, то тут пишешь так как удобно тебе, а не аналитика на ЛОРе.

mono ★★★★★
()

Лолкс, сколько говори - главное единый стиль во всей программе. И да, все дело в привычке. Я лично терпеть не могу ваш «удобный» первый стиль. Т.к. когда используется табуляция в 2 пробела, скобки двух блоков, стоящих очень близко, сливаются и дизориентируют.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

скобки двух блоков, стоящих очень близко, сливаются и дизориентируют.

так пусть они не стоят близко. Таб в четыре пробела.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>так пусть они не стоят близко. Таб в четыре пробела.

Нет, с таким подходом лучше либо вообще не писать, либо писать все в одну строчку :)

gh0stwizard ★★★★★
()

А по сабжу, я предпочитаю стиль Аллмана, с табом в 4 пробела и без пробелов в и перед скобками.

Viglim
()

В своих проектах использую первый вариант расположения скобок. Считаю его более наглядным.

Второй пробовал, как-то он не прижился.

Genuine ★★★
()
Ответ на: комментарий от gh0stwizard

>>так пусть они не стоят близко. Таб в четыре пробела.

Нет, с таким подходом лучше либо вообще не писать, либо писать все в одну строчку :)


Может, склероз и галлюцинации, но как щаз помню что это был стандарт в Дэльфи. begin в точности на end'ом, табуляция внутреннего блока на четыре пробела.

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.