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)

а во втором случае мозг автоматически не ищет для закрывающей скобки соответствующий ей оператор if?

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

а во втором случае мозг автоматически не ищет для закрывающей скобки соответствующий ей оператор if?

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

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

вы разделом не ошиблись?

мне так нравиться

if (b) { 
        doSomething(); 
        if (result) { 
                b = false;
        } else {
                b = true; 
        }
}
ядрописателям вроде тоже.

rg-400
()

Ви слишком много пересидели в QtCreator'е. То, как сделано в первой цитате - по умолчанию делает КуТеКреатир.

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

Пожалейте байты, господа!

staseg ★★★★★
()

было бы лучше, если бы хоть чуточку меньше народу перестало делать так

if( b )
вместо более читабельного варианта:
if (b)

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

Ви слишком много пересидели в QtCreator'е. То, как сделано в первой цитате - по умолчанию делает КуТеКреатир.

Ничего он не делает по умолчанию. А генератор классов делает как во втором примере.

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

Форматирование из всех полей.

Фортрана на вас нету.

Brainfuck'а на вас нету. Вот там нет проблем с форматированием :-]

Camel ★★★★★
()

( b )

Ненависть!

Я за второй вариант, мой мозг не испытывает никаких проблем с уровнями.

GotF ★★★★★
()
Ответ на: комментарий от Reset
if k = m = n + ( a ? (b) : ( (c+d*e)? : (e*f+g: h : i) ) {
    return k*117;
}

пробелы перед скобочками упрощают понимание того, что в условии if'а =)

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

Вот именно, что _перед_ скобками, а не _после_.

Reset ★★★★★
()

спасибо кэп, вы только что описали мой код-стайл.

jcd ★★★★★
()

Во втором случае левый верхний угол «квадрата» не на открывающей скобке, а на if'е.

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

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

Reset ★★★★★
()

Мой мозг гораздо лучше воспринимает второй вариант - мне так комфортней. Сначала писал первым стилем, потом перешел на второй. Причины - код компактнее, читается легче, для меня блок начинается от if, а не от скобки, к которой надо еще найти что она открывает.

aix27249
()

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

Terrens
()

это не проблема. В любой нормальной IDE есть автоформатирование.
Каждый др^форматирует как хочет.

rg-400
()

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

зря надеешься, это 1) классика - K&R; 2) официальный стиль многих больших проектов, в т.ч. КДЕ (правда в кде-стайл функции и классы оформляются как в первом примере, мне это кажется правильным).

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

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

> О, спасибо. Не знал о таком софте.

для маньяков: есть даже софт, позволяющий при ошибке в coding style обрывать сборку/автотесты с ошибкой :)

stevejobs ★★★★☆
()

>http://www.kernel.org/doc/Documentation/CodingStyle

Chapter 3

the preferred way, as

shown to us by the prophets Kernighan and Ritchie, is to put the opening brace last on the line, and put the closing brace first... However, there is one special case, namely functions: they have the opening brace at the beginning of the next line

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

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

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

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

Вот она - квинтессенция здравой мысли.

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

Ъ это

if(b){...}else{...} 
квадрат превращается в линию, что может быть проще?

rg-400
()

Вот так отделяют олдскул от пионеров.
С микрософтом и жалкие потуги «инноваторов» - нам не по пути.
Все дискуссии уже давно были.
Я бы уже на интервью сразу отсеивал тех - кто попытается писать скобки под операторами.
Привыкайте. Это стиль классического си. Так же как и /* */ комменты (хотя можно понаставить плюсовые и убрать ворнинги).
K&R и сорсы Линуса - наше всё.

siberean
()

О, форматирование-срач?

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

>Опираясь на своё мнение.

Если серьезно, то

if (condition)
{
  when_true();
}
else
{
  when_false();
}

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

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

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

и брал бы на работу старых пер^W^W людей предпенсионного возраста и wannabe-олдфагоф?

RedPossum ★★★★★
()

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

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

>Ничего он не делает по умолчанию.

Как не делает? Открыть скобку после названия класса/функции/цикла/и_тд. нажать энтарь. И он автоматом переносит скобку с начала строки.

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

и брал бы на работу старых пер^W^W людей предпенсионного возраста и wannabe-олдфагоф?

да.
они имеют такой опыт - который не пропьёшь. И не будут заниматься хернёй и попадать в капканы, в которые они уже попадали 20 лет назад. Кстати, на мейнфреймах и самых ответственных местах, где идут реальные и большие данные - работают почти исключительно пенсионеры, получают больше всех и им трудно сейчас найти замену.
Если молодые и приходят - пытаются изменить, переписывать, и ничего не работает. Уходят, вернее убегают с позором, и всё «заваривают» по-старому. Нам на курсах говорили, что в штатовском ИТ - не могут найти мейнфреймщиков (не липовых, а серьёзных) и за 150к в год.
Думаю, современный олдскул (кому сейчас 40-50) и кто работал ещё на классическом си - тоже не отпустят на пенсию через 20 лет и будут предлагать любые деньги - лишь бы поработали ещё.

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

например, есть у нас строчка:

PrintWriter out = null;
out = response.getWriter();

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

поэтому следующий шаг: выделить код, и нажать в идее кнопкосочетание Ctrl+Alt+T. Вылезет менюшка «Surround With...», в которой можно будет выбрать пункт «Surround with try..catch».

На выходе получается такой вот текст:

PrintWriter out = null;
try {
    out = resp.getWriter();
} catch (IOException e) {
    e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}

С одной стороны, используется конструкция, начинающаяся с try. С другой стороны, мы видим, что всё кроме сабжевой строчки «out = resp.getWriter();» является мусором, смысл которой описывается двумя словами: surround with try.

заметим, что открывающий символ конструкции («try») имеет один и тот же уровень отступа, что и закрывающий символ («}»)

т.е., если думать о блоке кода как о чем-то, над чем будут выполняться групповые операции (индентация, extract variables, итп), и считать это важным моментом использования (например, при аццком рефакторинге), то первый вариант записи имеет право на жизнь. Он отвечает не на вопрос «каким символом начиналась конструкция», а скорее «покажите мне блок кода, над которым можно сделать групповую операцию!».

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

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