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)
Ответ на: комментарий от stevejobs

>табуляция внутреннего блока на четыре пробела.

Да табуляция в 4 пробела это стандарт во многих компаниях. Фишка в том, что редактор можно настраивать под себя, и тут вот, мнения и расходятся. После питона, привык к двум пробелам и ни пикселем больше :)

gh0stwizard ★★★★★
()

во втором слуае наоборот легче воспринимать логический блок целиком, ибо сразу видно его начало (условие), ветвление и конец.

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

После питона, привык к двум пробелам и ни пикселем больше :)

????

Indentation

Use 4 spaces per indentation level.

For really old code that you don't want to mess up, you can continue to use 8-space tabs.

PEP 8 — Style Guide for Python Code

пруф: http://www.python.org/dev/peps/pep-0008/

stevejobs ★★★★☆
()

Я предпочитаю такой стиль:

if(m_someVariable == true) {
   privateMethod(m_anotherVar);

   // useful comment
   for(int i = 0; i < 10; i++) {
      doSomethinUseful(i);
   }
}
else {
   m_object->PublicMethod();
}
andreyu ★★★★★
()
Ответ на: комментарий от isden

там в его примере еще размер таба, прилеплять/ниприлеплять первую скобку к if, пробелы вокруг ==, пробел после последней скобки в условии, отсутствие пробелов в вызове метода с одной переменной, место куда надо писать комментарии и сам вид комментариев, расстановка пробелов и скобок в полном выражении с полнеым фором (кстати, с пустым фором не раскрыто), расстановка страелочек, расстановка аргументов в вызове без параметра, ммм... что пропустил? =)

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

дельфи? я его последний раз видел, дай б-г памяти, лет 10 назад. что не может не радовать.
а что, там уже тоже можно юзать кривые скобки? :)

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

>прогу, PHP, 8 страниц без комментариев, понять невозможно

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

Задача - скопипастать код, прменить на него парочку регэксповых find-and-replace

Ты, видимо, до сих пор никак не можешь перестать писать лабораторные?

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

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

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

class My_Class {public:

advanced obfuscation: скрываем директиву public

do_something_else ();};};};};

advanced obfuscation: перенимаем лисповый стиль с миллионом закрывающих скобочек на одной строке. Достаточно добавить/удалить лишнюю, чтобы обеспечить дичайший поток маловразумительных диагностических сообщений. И нафига столько ';'? На всякий пожарный чтоли?

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

>Это личные заскоки разработчиков ядра. Кому они интересны?

Во-первых, их «личные заскоки» подкрепляются сложным проектом уж не знаю на сколько тысяч строк.

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

Ну и в-третьих, такой стиль является одновременно эстетичным (на мой взгляд) и практичным.

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

> Достаточно добавить/удалить лишнюю, чтобы обеспечить дичайший поток маловразумительных диагностических сообщений.

наверняка на названии твоего языка поставлено два креста =)

еще 10 лет назад Дэльфи вылавливала место синтаксической ошибки и рассказывала, на что заменить, чтобы стало правильно.

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

Во-вторых, «личные заскоки» базируются на авторитетных «заскоках» K&R

K&R жили в страшную эпоху четырехкилобайтных машин и машинно-адаптированных языков. Язык как бы подтверждает, что их приоритеты были далеки от человекочитабельности, сильной обработки ошибок, ООП и всего прочего сладкого юзабилити.

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

>наверняка на названии твоего языка поставлено два креста =)

На всякий случай хочу обратить внимание на заголовок треда: [c/c++]... Удивительно, как мне удается придерживаться нити дискусии.

еще 10 лет назад Дэльфи вылавливала место синтаксической ошибки и рассказывала, на что заменить, чтобы стало правильно.

Ага, сейчас! А вот для Java был jikes который и в самом деле советовал, как поправить опечатки.

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

>без сильной обработки ошибок

человекочитабельность

ООП

сладкое юзабилити

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

linuxfan
()

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

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

Не сама тема, а про делфи же.

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

Пишу вторым способом
работающий и читаемый код.

/ 0. Расскажите кто-нибудь, как вы парсите второй вариант?

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

>Купи нормальный монитор, нищеброд.

TODO:
1. Купить джип
2. Закрасить поворотники

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

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

Тред попахивает гомосексуализмом...

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

>подкрепляются сложным проектом уж не знаю на сколько тысяч строк.

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

такой стиль является одновременно эстетичным (на мой взгляд) и практичным.


Я уже написал выше, почему лично мне он не нравится. ИМХО операторы и начало/конец блоков — это слишком разные сущности и их надо держать на разных строчках.

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

class My_Class {public:

advanced obfuscation: скрываем директиву public

Для небольших классов удобно делать все поля открытыми. Странно, что директиву по умолчанию для классов сделали не как для struct.

advanced obfuscation: перенимаем лисповый стиль с миллионом закрывающих скобочек на одной строке. Достаточно добавить/удалить лишнюю, чтобы обеспечить дичайший поток маловразумительных диагностических сообщений.

Это действительно lisp style. Текстовый редактор парные скобки подсвечивает и позволяет по ним прыгать. А еще он может прыгать между парными. Если забыл скобку, то идешь в конец файла, ставишь закрывающую и прыгаешь с нее на парную. Делов то.

И нафига столько ';'? На всякий пожарный чтоли?

Запоминать где ";" обязательно (типа {return 0;}), а где нет задалбывает. Вот perl, например, везде позволяет не ставить ";" где и без них все понятно.

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

>perl

А, ну с этого и надо было начинать. Понятно теперь, откуда стремление к обфускации кода.

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

> Купи нормальный монитор

Большой монитор позволит работать с бОльшими функциями :) Какой монитор не возьмёшь, 2-ой способ даёт выигрыш.

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

Расскажите кто-нибудь, как вы парсите второй вариант?

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

В первом же случае и количество строк кода больше, и визуально не очень-то понятно, относится открывающая скобка к if'у, или это просто блок, в котором можно объявить/переопределить временные переменные.

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

>http://techbase.kde.org/Policies/Kdelibs_Coding_Style

Все было неплохо до строчки

astyle --indent=spaces=4 --brackets=linux \
       --indent-labels --pad-oper --unpad-paren \
       --one-line=keep-statements --convert-tabs \
       --indent-preprocessor \
       `find -type f -name '*.cpp'` `find -type f -name '*.cc'` `find -type f -name '*.h'`

Вроде серьезные ребята, а про -o не знают.

Кстати, а зачем 4 пробела? 1 Табуляция лучше, я считаю.

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

>а потом откроет кто-нибудь в mcview с 8ю пробелами и ужаснется

И? Размер табуляции изменить просто до безобразия. А вот, скажем, плавающие пробелы от такого стиля появляются во множестве. И вообще, использование пробелов вместо табуляции ведет к дикой нечистоплотности.

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

>использование пробелов вместо табуляции ведет к дикой нечистоплотности

a) это официальный кодинг-стайл туевой хчи проектов - как же у них все не расплывается?

б) одна из возможных разгадок - git не накладывает патчи с табами и лишними пробелами. Многие средства инспекции кода также подсвечивают эти ошибки

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

еще иногда хочется странного выровнять некоторые строки друг под другом, например, сделать инициализацию переменных в конструкторе «столбиком» - с табами без фиксированной величины таба так не получится

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

>с табами без фиксированной величины таба

Не вижу разницы между фразой: «всем делать отступы по 4 пробела» и «всем установить ширину табуляции в 4 символа и делать отступы табуляцией». Может объяснишь, нафига это?

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

а нафига тогда табы? с пробелами будет выглядеть одинково у всех, а с табами только у поссвященных

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

>а нафига тогда табы?

Для более легкой навигации, например: срелка влево/вправо двигает сразу аж на 4 знакоместа! Плюс некоторая компактность в плане объема исходного кода, или в наше время повайтспейсная оплата быдлокода в моде?

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

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

Плюс некоторая компактность в плане объема исходного кода

как-то не задумывался над этой проблемой. кода все-таки существенно больше

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

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

Правда чтоли? А если комментарий какой написать или еще что в этом духе? Кстати, а если переходить из «логического начала» строки 1 в строку 2, а потом в 3, какой будет результат?

1    // indent level 1
2        // indent level 2
3    // indent level 1

А если из «логического начала» строки 2 в строку 1 или 3?

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

> А если комментарий какой написать или еще что в этом духе?

Комментарий не на том же отступе, что и код? Отказать!

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

Зато смотреть глаза дёргаются. Ну нафек.

kemm
()

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

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

>Плюс некоторая компактность в плане объема исходного кода

Долго ли, коротко ли, но твой ZX 48K морально устарел.

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

> сделать инициализацию переменных в конструкторе «столбиком» - с табами без фиксированной величины таба так не получится

<tab><space><space>код

для удобства использовать редакторы, помечающие символы табуляции

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